ORDER BY no SQL Server
- Amanda Nascimento
- 30 de mai.
- 2 min de leitura
Organizar os resultados de uma consulta é essencial para análise e apresentação dos dados. É aí que entra o ORDER BY. A cláusula ORDER BY é usada para ordenar o resultado de uma consulta SQL com base em uma ou mais colunas. Por padrão, a ordenação é crescente (ASC), mas também é possível ordenar de forma decrescente (DESC).
O ORDER BY sempre deve ser a última cláusula da sua consulta, ou seja, ele vem depois do WHERE, GROUP BY ou HAVING.
Sintaxe:
SELECT coluna1, coluna2
FROM nome_da_tabela
ORDER BY coluna1 [ASC | DESC];
ORDER BY em ordem crescente
ORDER BY PFUNC.NOME ASC
ORDER BY em ordem decrescente
ORDER BY PFUNC.NOME DESC
ORDER BY personalizado
Você pode usar expressões condicionais, como a cláusula CASE, para especificar uma ordem personalizada. Isso permite que você defina uma lógica personalizada para a ordenação
-- Exemplo 1
ORDER BY CASE WHEN coluna = 'A' THEN 1 WHEN coluna = 'B' THEN 2 ELSE 3 END;
-- Exemplo 2
ORDER BY
CASE PFUNC.CODSITUACAO
WHEN 'A' THEN 1
WHEN 'F' THEN 2
WHEN 'D' THEN 3
ELSE 4 -- Caso haja outros valores, eles serão ordenados por último
END
-- Exemplo 3
ORDER BY
CASE PFUNC.CODSITUACAO
WHEN 'D' THEN 1
ELSE 2
END,
PFUNC.NOME
ORDER BY com data
Considerando data no formato dd/mm/yyyy
ORDER BY CONVERT(DATE, DATA_REF, 103)
Para saber mais sobre datas, clique aqui
ORDER BY com múltiplas colunas
Queremos ordenar pelos pedidos mais recentes e, em caso de empate na data, pelo maior valor:
SELECT PedidoID, ClienteID, ValorTotal, DataPedido
FROM Pedidos
ORDER BY DataPedido DESC, ValorTotal DESC;
ORDER BY por posição da coluna
Você também pode usar a posição da coluna na cláusula ORDER BY (não é o mais recomendado, mas pode ser útil em alguns cenários rápidos):
SELECT Nome, Cidade
FROM Clientes
ORDER BY 2; -- Ordena pela segunda coluna (Cidade)
ORDER BY com alias
É possível ordenar usando uma coluna derivada, como por exemplo, o ano da data:
SELECT Nome, YEAR(DataNascimento) AS AnoNascimento
FROM Clientes
ORDER BY AnoNascimento;
SELECT Nome, DataNascimento
FROM Clientes
ORDER BY YEAR(DataNascimento);