sql >> Databasteknik >  >> RDS >> Sqlserver

CASE-uttalande för Order By-klausul med flera kolumner och Desc/Asc Sorter

Du kan skriva flera fall, även om de alla har samma villkor.

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 

Egentligen anger du inte en kolumn att sortera efter, utan ett uttryck.

Fallsatsen returnerar null om villkoret inte är uppfyllt, så egentligen betyder det:

CASE @OrderByColumn WHEN 1 THEN Forename ELSE NULL END

Så om @OrderByColumn inte är 1 så returnerar satsen alltid NULL. Det utesluter förresten inte det från sortering, men det sätter ihop alla dessa rader i resultatet, vilket gör "SurName" till den avgörande sorteringen inom den gruppen av rader.



  1. Ta bort ett databaspostkonto (SSMS)

  2. php + mysql infogningsfel

  3. MAKEDATE() Exempel – MySQL

  4. Använd FILEGROUP_NAME() för att returnera namnet på en filgrupp i SQL Server