Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Instruction CASE pour Trier par clause avec plusieurs colonnes et tri Desc/Asc

Vous pouvez écrire plusieurs cas, même s'ils ont tous la même condition.

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 

En fait, vous ne spécifiez pas une colonne à trier, mais une expression.

L'instruction case renvoie null si la condition n'est pas remplie, donc cela signifie en fait :

CASE @OrderByColumn WHEN 1 THEN Forename ELSE NULL END

Donc, si @OrderByColumn n'est pas 1, l'instruction renvoie toujours NULL. Soit dit en passant, cela ne l'exclut pas du tri, mais cela rassemble toutes ces lignes dans le résultat, faisant de 'SurName' le tri décisif au sein de ce groupe de lignes.