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

CASE WHEN-erklæring for ORDER BY-klausul

CASE er et udtryk - det returnerer en enkelt skalarværdi (pr. række). Det kan ikke returnere en kompleks del af parse-træet af noget andet, såsom en ORDER BY klausul af en SELECT erklæring.

Det ser ud til, at du bare har brug for:

ORDER BY 
CASE WHEN TblList.PinRequestCount <> 0 THEN TblList.PinRequestCount END desc,
CASE WHEN TblList.HighCallAlertCount <> 0 THEN TblList.HighCallAlertCount END desc, 
Case WHEN TblList.HighAlertCount <> 0 THEN TblList.HighAlertCount END DESC,
CASE WHEN TblList.MediumCallAlertCount <> 0 THEN TblList.MediumCallAlertCount END DESC,
Case WHEN TblList.MediumAlertCount <> 0 THEN TblList.MediumAlertCount END DESC,
TblList.LastName ASC, TblList.FirstName ASC, TblList.MiddleName ASC

Eller muligvis:

ORDER BY 
CASE
   WHEN TblList.PinRequestCount <> 0 THEN TblList.PinRequestCount
   WHEN TblList.HighCallAlertCount <> 0 THEN TblList.HighCallAlertCount
   WHEN TblList.HighAlertCount <> 0 THEN TblList.HighAlertCount
   WHEN TblList.MediumCallAlertCount <> 0 THEN TblList.MediumCallAlertCount
   WHEN TblList.MediumAlertCount <> 0 THEN TblList.MediumAlertCount
END desc,
TblList.LastName ASC, TblList.FirstName ASC, TblList.MiddleName ASC

Det er lidt svært at sige, hvilken af ​​ovenstående (eller noget andet) der er det, du leder efter, fordi du ikke har forklaret hvilken faktisk sorteringsrækkefølge du forsøger at opnå, og b) ikke har leveret nogen eksempeldata og forventede resultater, som vi kunne forsøge at udlede af den faktiske sorteringsrækkefølge, du forsøger at opnå.

Dette kan være det svar, vi leder efter:

ORDER BY 
CASE
   WHEN TblList.PinRequestCount <> 0 THEN 5
   WHEN TblList.HighCallAlertCount <> 0 THEN 4
   WHEN TblList.HighAlertCount <> 0 THEN 3
   WHEN TblList.MediumCallAlertCount <> 0 THEN 2
   WHEN TblList.MediumAlertCount <> 0 THEN 1
END desc,
CASE
   WHEN TblList.PinRequestCount <> 0 THEN TblList.PinRequestCount
   WHEN TblList.HighCallAlertCount <> 0 THEN TblList.HighCallAlertCount
   WHEN TblList.HighAlertCount <> 0 THEN TblList.HighAlertCount
   WHEN TblList.MediumCallAlertCount <> 0 THEN TblList.MediumCallAlertCount
   WHEN TblList.MediumAlertCount <> 0 THEN TblList.MediumAlertCount
END desc,
TblList.LastName ASC, TblList.FirstName ASC, TblList.MiddleName ASC


  1. Hvordan overfører man XML fra C# til en lagret procedure i SQL Server 2008?

  2. Introduktion af Easysoft Oracle®-driveren i dit SOA-miljø

  3. T-SQL tirsdag #33:Trick Shots:Skema Switch-A-Roo

  4. TO_TIMESTAMP_TZ() Funktion i Oracle