sql >> Databáze >  >> RDS >> Sqlserver

Příkaz CASE WHEN pro klauzuli ORDER BY

CASE je výraz - vrátí single skalární hodnota (na řádek). Nemůže vrátit složitou část stromu analýzy něčeho jiného, ​​například ORDER BY klauzule SELECT prohlášení.

Vypadá to, že potřebujete:

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

Nebo možná:

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

Je trochu složité určit, co z výše uvedeného (nebo něco jiného) je to, co hledáte, protože jste a) nevysvětlili jaké skutečné pořadí řazení se snažíte dosáhnout, a b) nedodali žádná vzorová data a očekávané výsledky, ze kterých bychom se mohli pokusit dedukovat skutečné pořadí řazení, kterého se snažíte dosáhnout.

Toto může být odpověď, kterou hledáme:

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. Nová funkce pro BYOC – pozastavení a obnovení clusterů

  2. Vytváření vysoce dostupné databáze pro Moodle pomocí MariaDB (Replication &MariaDB Cluster)

  3. Jaké jsou režie používání AUTOINCREMENT pro SQLite na Androidu?

  4. SQL Server Převod celého čísla na binární řetězec