#sql #sql-server #tsql
#sql #sql-сервер #tsql
Вопрос:
Скажите, есть ли у меня следующие записи:
ID Type
1 AUY
2 NGD
3 AUY
4 NGD
5 BUL
Мне нравится сортировать ее по типу, чтобы «AUY» и «NGD» сортировались в алфавитном порядке, но «BUL» всегда был в конце.
Итак, это будет выглядеть так:
AUY
AUY
NGD
NGD
BUL
Ответ №1:
Предполагая, что ваша таблица называется table_1, вы можете сделать это с помощью следующего:
SELECT * FROM [table_1]
ORDER BY (CASE WHEN [Type] = 'BUL' THEN 2 ELSE 1 END),
[Type]
В качестве альтернативы вы можете добавить новый столбец для приоритета порядка и использовать его, если хотите что-то более масштабируемое.
Комментарии:
1. Я поддержал, но вы должны исправить одинарные кавычки в ответе.
case
Возвращаемые значения не нуждаются в кавычках, и кавычки неправильные вокруг «BUL».2. Хотя кавычки возврата по регистру не нужны, они все еще работают. Однако я могу их удалить. Не уверен, что вы имеете в виду, говоря о кавычках вокруг ‘BUL’. Это правильно.
3. Что с ними было не так? Я не вижу разницы. Может быть, другое форматирование, потому что я использую мобильный?
4. @reynoldsbj . . . Это интересно. Это были фигурные одинарные кавычки. Кавычки в
case
хороши, но излишни (зачем вводить их, если они вам не нужны). И он перестает работать, если у вас более 9 или 10 условий.5. Странно, я ввел одну и ту же одинарную кавычку в обеих частях… Я обвиняю автозамену?
Ответ №2:
Используйте CASE
выражение:
...
ORDER BY CASE [Type] WHEN 'AUY' THEN 1
WHEN 'NGD' THEN 2
WHEN 'BUL' THEN 3
ELSE 4
END;
Комментарии:
1. … Или лучше:
ORDER BY IIF([Type] = 'BUL', 1, 0), [Type]
— предполагается более 3 различных типов…2. @ZoharPeled Спасибо. Как бы вы это сделали, если существует более 3 различных типов и вы хотите, чтобы ‘BUL’ всегда был в конце.
3. @NatePet точно так, как я написал в комментарии… Суть в том, чтобы сначала упорядочить по результату type =
bul
, а затем по типу.