Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Declaração CASE para Cláusula Order By com Várias Colunas e Classificação Desc/Asc


Você pode escrever vários casos, mesmo que todos tenham a mesma condição.
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 

Na verdade, você não especifica uma coluna para classificar, mas uma expressão.

A instrução case retorna null se a condição não for atendida, então na verdade significa:
CASE @OrderByColumn WHEN 1 THEN Forename ELSE NULL END

Portanto, se @OrderByColumn não for 1, a instrução retornará sempre NULL. Isso não o exclui da classificação, a propósito, mas coloca todas essas linhas juntas no resultado, tornando 'SurName' a classificação decisiva dentro desse grupo de linhas.