sql >> Base de Datos >  >> RDS >> Sqlserver

Declaración CASE para la cláusula Order By con varias columnas y clasificación Desc/Asc

Puede escribir varios casos, incluso si todos tienen la misma condición.

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 realidad, no especifica una columna para ordenar, sino una expresión.

La declaración del caso devuelve nulo si no se cumple la condición, por lo que en realidad significa:

CASE @OrderByColumn WHEN 1 THEN Forename ELSE NULL END

Entonces, si @OrderByColumn no es 1, la declaración siempre devuelve NULL. Por cierto, eso no lo excluye de la clasificación, pero junta todas esas filas en el resultado, lo que hace que 'Apellido' sea la clasificación decisiva dentro de ese grupo de filas.