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?

È stato utile?

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
scroll top