2014-09-25 10 views
6

A seguito della mia precedente domanda qui Case statement for Order By clause with Desc/Asc sort Ho una dichiarazione come questa:Istruzione CASE per la clausola ORDER BY con più colonne e Desc/Asc Sort

SELECT 
    * 
FROM 
    TableName 
WHERE 
ORDER BY 
    CASE @OrderByColumn WHEN 1 THEN Forename END DESC, 
    CASE @OrderByColumnWHEN 2 THEN Surname END ASC 

Questo funziona bene, ma a volte ho bisogno di più di colonna nell'ordine di Io in realtà bisogno di qualcosa di simile:

..... 
ORDER BY 
    CASE @OrderByColumn WHEN 1 THEN Forename, Date, Location END DESC 

non riesco a capire come fare la dichiarazione CASE consentire più colonne nella parte THEN.

risposta

8

Avete bisogno di questo?

ORDER BY 
    CASE @OrderByColumn WHEN 1 THEN Forename END DESC, Date, Location, 
    CASE @OrderByColumn WHEN 2 THEN Surname END ASC 
6

È possibile scrivere più casi, anche se tutti hanno le stesse condizioni.

ORDER BY 
    CASE @OrderByColumn WHEN 1 THEN Forename END DESC, 
    CASE @OrderByColumn WHEN 1 THEN Date END DESC, 
    CASE @OrderByColumn WHEN 1 THEN Location END DESC, 
    CASE @OrderByColumn WHEN 2 THEN Surname END ASC 

In realtà, non si specifica una colonna per ordinare, ma un'espressione.

Il caso istruzione restituisce null se la condizione non è soddisfatta, quindi in realtà significa:

CASE @OrderByColumn WHEN 1 THEN Forename ELSE NULL END 

Quindi, se @OrderByColumn non è 1, allora l'istruzione restituisce sempre NULL. Questo non lo esclude dall'ordinamento, comunque, ma riunisce tutte quelle righe nel risultato, rendendo "SurName" l'ordinamento decisivo con quel gruppo di righe.

Problemi correlati