Quero que minha consulta retorne as linhas da tabela em que uma coluna contém um valor específico primeiro e, em seguida, retorne o restante das linhas em ordem alfabética.
Se eu tiver uma tabela, algo como este exemplo:
- Table: Users
- id - name - city
- 1 George Seattle
- 2 Sam Miami
- 3 John New York
- 4 Amy New York
- 5 Eric Chicago
- 6 Nick New York
E usando essa tabela, desejo que minha consulta retorne as linhas que contêm Nova York primeiro e depois o restante das linhas em ordem alfabética por cidade. Isso é possível usando apenas uma consulta?
sql
sql-order-by
Phoexo
fonte
fonte
Respostas:
No SQL Server, Oracle, DB2 e muitos outros sistemas de banco de dados, é isso que você pode usar:
fonte
ELSE 2
seção significa que, enquanto Nova York obtém o valor 1, todos os outros valores obtêm o valor 2. ... pelo menos no que diz respeito à ordem de classificação.Se o seu dialeto SQL for inteligente o suficiente para tratar expressões booleanas como tendo um valor numérico, você poderá usar:
fonte
ORDER BY
cláusula.CASE
instrução (que é o SQL padrão), o SQL Server pode muito bem usar uma expressão naORDER BY
cláusula. " estúpido demais para processar testes de equivalência " está simplesmente errado. Se em tudo o que deve ler: " não suporta a conversão implícita do MySQL de booleantrue
ao valor1
(um). "ORDER BY id = 123 DESC, name ASC
Minha resposta pode ser antiga e não é necessária, mas alguém pode precisar de uma abordagem diferente, portanto, publicá-la aqui.
Eu tinha o mesmo requisito implementado isso, funcionou para mim.
PS
isto é para SQL
fonte