CASE in ORDER BY poche colonne
-
18-09-2019 - |
Domanda
Utilizzando un blocco caso, allora, ho bisogno di scegliere come ordinare la mia query SQL 2008, di [status] ASC, [date] DESC
o semplicemente [date] DESC
.
Io so solo come usare una colonna:
SELECT *
FROM table
ORDER BY
CASE WHEN @flag = 0
THEN R.[date] END DESC,
CASE WHEN @flag = 1
THEN R.[status] END ASC
Come utilizzare entrambe le colonne nel secondo caso?
Soluzione
- Se il flag è 0, poi ne ordiniamo da (null, r.date desc).
- In caso contrario, faremo ORDER BY (r.Status, disc r.date)
Con l'espressione CASE a "progetto" un nuovo valore per l'ordinazione.
SELECT *
FROM table
ORDER BY
CASE WHEN @flag = 0 THEN r.Status ELSE null END,
r.[date] desc
Altri suggerimenti
In genere per mettere ordine condizionale in, è sufficiente ripetere l'istruzione CASE.
SELECT *
FROM table
ORDER BY
CASE WHEN @flag = 0 THEN R.[date] END DESC,
CASE WHEN @flag = 0 THEN R.[somethingelse] END ASC,
CASE WHEN @flag = 1 THEN R.[status] END ASC
;
Ma nel tuo caso, la sovrapposizione di 'data' significa che è possibile semplificare piace il commento di David B.
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow