В MS SQL Server 2005 я пишу один запрос с условной сортировкой, и моя проблема в том, что я не знаю, как я могу сортировать условно, используя два столбца?
Если я написал такой код, он работает нормально
select
*
from
table
order by
case @pkr
when 'kol' then kol
when 'nci' then nci
end
Я не знаю, как сделать условный порядок для двух или более столбцов
select
*
from
table
order by
case @pkr
when 'KOL-NCI' then kol,nci
when 'kol-MPCI' then kol,mpci
end
Есть идея сделать динамический TSQL и использовать, sp_executesql
но я все еще ищу лучшую идею?
sql-server
order-by
adopilot
источник
источник
CASE
может быть применимо к данному случаю.Ответы:
Я признаю, что мне никогда не приходилось делать это раньше, поэтому было немного царапин на голове. Простой пример таблицы для демонстрации:
Используя параметр @SortStyle для различения порядков сортировки, @SortStyle = 1 будет сортировать по,
col1 ASC, col2 DESC
а @ SortStyle = 2 - поcol2 DESC, col1 ASC
.Как вы ORDER BY параметр охватывает более простой случай сортировки всего 1 столбец.
источник
Предполагая, что у вас есть больше случаев (я добавил один), и все типы совместимы,
Это не сортировка по нескольким столбцам: у вас есть первичная сортировка, за которой следует вторичная сортировка. Просто посмотрите на диалоговое окно сортировки в Excel, чтобы понять, что я имею в виду.
источник
С приведенным вами примером это просто:
Всегда приятно избегать динамического SQL, где это возможно
источник