Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

CASE WHEN oświadczenie dla klauzuli ORDER BY

CASE to wyrażenie - zwraca singiel wartość skalarna (na wiersz). Nie może zwrócić złożonej części drzewa analizy czegoś innego, takiego jak ORDER BY klauzula SELECT oświadczenie.

Wygląda na to, że potrzebujesz tylko:

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

Lub ewentualnie:

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

Trochę trudno jest określić, którego z powyższych (lub czegoś innego) szukasz, ponieważ a) nie wyjaśniono jaką rzeczywistą kolejność sortowania chcesz osiągnąć i b) nie dostarczyłeś żadnych przykładowych danych i oczekiwanych wyników, z których moglibyśmy spróbować wydedukować rzeczywistą kolejność sortowania, którą próbujesz osiągnąć.

To może być odpowiedź, której szukamy:

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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Złe nawyki:unikanie NULL w SQL Server

  2. Błąd serwera SQL 110:W instrukcji INSERT jest mniej kolumn niż wartości określone w klauzuli VALUES.

  3. Jak porównać wersje oprogramowania za pomocą SQL Server?

  4. Rzeczywiste a zmiennoprzecinkowe a pieniądze

  5. Jakie są zalety i wady przechowywania SQL w Stored Procs w porównaniu z kodem?