sql >> Databasteknik >  >> RDS >> Sqlserver

CASE NÄR uttalande för ORDER BY-klausul

CASE är ett uttryck - det returnerar en singel skalärt värde (per rad). Det kan inte returnera en komplex del av analysträdet för något annat, som en ORDER BY sats av en SELECT uttalande.

Det verkar som att du bara behöver:

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 möjligen:

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 är lite knepigt att säga vilket av ovanstående (eller något annat) som är det du letar efter eftersom du inte har förklarat vilken faktisk sorteringsordning du försöker uppnå, och b) inte tillhandahållit några exempeldata och förväntade resultat, från vilka vi kunde försöka dra slutsatser den faktiska sorteringsordningen du försöker uppnå.

Det här kan vara svaret vi letar 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. Hur kan jag läsa data från en krypterad DB med SQLiteAssetHelper?

  2. Databas hög tillgänglighet för Camunda BPM med MySQL eller MariaDB Galera Cluster

  3. SQL Server - anslut rader till en kommaseparerad lista

  4. En databasmodell för en MOOC-plattform