W MS SQL Server 2005 piszę jedno zapytanie z sortowaniem warunkowym, a moim problemem jest to, że nie wiem, jak mogę sortować warunkowo za pomocą dwóch kolumn?
Jeśli napisałem taki kod, działa normalnie
select
*
from
table
order by
case @pkr
when 'kol' then kol
when 'nci' then nci
end
Nie wiem, jak zrobić warunkowe porządkowanie dla dwóch lub więcej kolumn
select
*
from
table
order by
case @pkr
when 'KOL-NCI' then kol,nci
when 'kol-MPCI' then kol,mpci
end
Jest pomysł, aby zrobić dynamiczny TSQL i używać go, sp_executesql
ale wciąż szukam lepszego pomysłu?
sql-server
order-by
adopilot
źródło
źródło
CASE
może mieć zastosowanie w tym przypadku.Odpowiedzi:
Przyznaję, że nigdy wcześniej nie musiałem tego robić, więc było trochę drapania w głowie. Prosta przykładowa tabela do zademonstrowania:
Używając parametru @SortStyle do rozróżnienia między sortowaniem, @SortStyle = 1 będzie sortować według,
col1 ASC, col2 DESC
a @ SortStyle = 2 sortuje wedługcol2 DESC, col1 ASC
.W jaki sposób ZAMÓWIĆ WEDŁUG parametru obejmuje prostszy przypadek sortowania według tylko 1 kolumny.
źródło
Zakładając, że masz więcej przypadków (dodałem jeden) i wszystkie typy są kompatybilne,
Nie jest to sortowanie wielokolumnowe: masz sortowanie podstawowe, a następnie sortowanie wtórne. Wystarczy spojrzeć na okno dialogowe sortowania w programie Excel, aby zobaczyć, co mam na myśli.
źródło
Podany przykład jest prosty:
Zawsze dobrze jest unikać dynamicznego SQL, jeśli to możliwe
źródło