Vamos a outra brincadeira com SQL-Server
Em alguns sistemas existe a característica de ordenação conforme click na coluna Header, então segue um exemplo que diz respeito a este tratamento usando Banco de Dados SQL-Server
Com o trecho abaixo pode ser informado qual o número da coluna que se deseja ordenar:
DECLARE @TABELA TABLE(ID INTEGER
, DESCRICAO VARCHAR(100)
, CADASTRO DATETIME
, IDADE INTEGER
, SITUACAO CHAR(1))
DECLARE @ORDERBY INTEGER
--LEGENDA DE ORDENACAO:
--[1 - ID]
--[2 - DESCRICAO]
--[3 - CADASTRO]
--[4 - IDADE]
--[5 - SITUACAO]
SET @ORDERBY = 1
INSERT INTO @TABELA VALUES(1, 'Z', '01-01-2013 00:00:00', 10, 'A')
INSERT INTO @TABELA VALUES(2, 'X', '03-03-2013 00:00:00', 40, 'I')
INSERT INTO @TABELA VALUES(3, 'Y', '02-02-2013 00:00:00', 30, 'A')
SELECT ID, DESCRICAO, CADASTRO, IDADE, SITUACAO
FROM @TABELA
ORDER BY CASE --ORDENAÇÃO NUMÉRICA
WHEN @ORDERBY = 1 THEN ID
WHEN @ORDERBY = 3 THEN CADASTRO
WHEN @ORDERBY = 4 THEN IDADE
END
,CASE --ORDENAÇÃO NÃO NUMÉRICA
WHEN @ORDERBY = 2 THEN DESCRICAO
WHEN @ORDERBY = 5 THEN SITUACAO
END
Já o próximo trecho de código resulta no mesmo resultado, mas utilizando-se do nome da coluna que se deseja ordenar:
DECLARE @TABELA TABLE(ID INTEGER
, DESCRICAO VARCHAR(100)
, CADASTRO DATETIME
, IDADE INTEGER
, SITUACAO CHAR(1))
DECLARE @ORDERBY VARCHAR(20)
SET @ORDERBY = 'SITUACAO'
INSERT INTO @TABELA VALUES(1, 'Z', '01-01-2013 00:00:00', 10, 'A')
INSERT INTO @TABELA VALUES(2, 'X', '03-03-2013 00:00:00', 40, 'I')
INSERT INTO @TABELA VALUES(3, 'Y', '02-02-2013 00:00:00', 30, 'A')
SELECT ID, DESCRICAO, CADASTRO, IDADE, SITUACAO
FROM @TABELA
ORDER BY CASE --ORDENAÇÃO NUMÉRICA
WHEN @ORDERBY = 'ID' THEN ID
WHEN @ORDERBY = 'CADASTRO ' THEN CADASTRO
WHEN @ORDERBY = 'IDADE' THEN IDADE
END
,CASE --ORDENAÇÃO NÃO NUMÉRICA
WHEN @ORDERBY = 'DESCRICAO' THEN DESCRICAO
WHEN @ORDERBY = 'SITUACAO' THEN SITUACAO
END
Pode-se transformar estes trechos de código em stored procedures onde tem como parâmetro de entrada a variável @ORDERBY.