Sqlserver
 sql >> Teknologi Basis Data >  >> RDS >> Sqlserver

Pernyataan CASE WHEN untuk klausa ORDER BY

CASE adalah ekspresi - ia mengembalikan tunggal nilai skalar (per baris). Itu tidak dapat mengembalikan bagian kompleks dari pohon parse dari sesuatu yang lain, seperti ORDER BY klausa dari SELECT pernyataan.

Sepertinya Anda hanya perlu:

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

Atau mungkin:

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

Agak sulit untuk membedakan mana di atas (atau yang lainnya) yang Anda cari karena Anda a) tidak dijelaskan urutan pengurutan aktual apa yang ingin Anda capai, dan b) tidak memberikan data sampel dan hasil yang diharapkan, yang darinya kami dapat mencoba menyimpulkan urutan pengurutan aktual yang ingin Anda capai.

Ini mungkin jawaban yang kami cari:

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. Manajemen Indeks SQL Server Menggunakan Manajer Indeks untuk SQL Server

  2. Konversi 'smalldatetime' menjadi 'datetime' di SQL Server (Contoh T-SQL)

  3. Eskalasi Kunci SQL Server

  4. cross apply xml query berkinerja lebih buruk secara eksponensial saat dokumen xml tumbuh

  5. Bagaimana cara mendapatkan perbedaan antara dua baris untuk bidang kolom?