Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

Istruzione CASE per l'ordine per clausola con più colonne e ordinamento Desc/Asc

Puoi scrivere più casi, anche se hanno tutti la stessa condizione.

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

In realtà, non specifichi una colonna in base alla quale ordinare, ma un'espressione.

L'istruzione case 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, l'istruzione restituisce sempre NULL. Ciò non lo esclude dall'ordinamento, tra l'altro, ma mette insieme tutte quelle righe nel risultato, rendendo "Cognome" l'ordinamento decisivo all'interno di quel gruppo di righe.