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

Instrukcja CASE dla kolejności według klauzuli z wieloma kolumnami i sortowaniem Desc/Asc

Możesz napisać wiele spraw, nawet jeśli wszystkie mają ten sam warunek.

ORDER BY 
    CASE @OrderByColumn WHEN 1 THEN Forename END DESC, 
    CASE @OrderByColumn WHEN 1 THEN Date END, 
    CASE @OrderByColumn WHEN 1 THEN Location END, 
    CASE @OrderByColumn WHEN 2 THEN Surname END ASC 

W rzeczywistości nie określasz kolumny, według której ma odbywać się sortowanie, ale wyrażenie.

Instrukcja case zwraca wartość null, jeśli warunek nie jest spełniony, więc w rzeczywistości oznacza to:

CASE @OrderByColumn WHEN 1 THEN Forename ELSE NULL END

Więc jeśli @OrderByColumn nie jest 1, instrukcja zwraca zawsze NULL. Nawiasem mówiąc, to nie wyklucza go z sortowania, ale umieszcza wszystkie te wiersze razem w wyniku, dzięki czemu „Nazwisko” jest decydującym sortowaniem w tej grupie wierszy.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MS SQL Server 2005 — spontanicznie łamie się procedura składowana

  2. Jak naprawić „Procedura oczekuje parametru „@statement” typu „ntext/nchar/nvarchar”. Błąd w SQL Server

  3. SQL INSERT, ale unikaj duplikatów

  4. Jak przechwycić dane przekazane w SqlBulkCopy przy użyciu Sql Profiler?

  5. Jak przechowywać dane wyjściowe MSSQL PRINT w zmiennej?