Сортировать столбцы таблицы в определенном порядке

#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 , а затем по типу.