Как сделать этот запрос в T-SQL - PullRequest
2 голосов
/ 28 августа 2009

У меня есть таблица с 3 столбцами A B C.

Я хочу выбрать * из этой таблицы, но упорядочено по определенному порядку столбца А.

Другими словами, допустим, столбец A содержит «стек», «поверх», «поток».

Я хочу выбрать * из этой таблицы и упорядочить по столбцу А в таком конкретном порядке: «стек», «поток», «над» - который не является ни восходящим, ни убывающим.

Возможно ли это?

Ответы [ 3 ]

10 голосов
/ 28 августа 2009

Вы можете использовать оператор CASE в предложении ORDER BY. Например ...

SELECT *
FROM Table
ORDER BY
   CASE A
      WHEN 'stack' THEN 1
      WHEN 'over' THEN 2
      WHEN 'flow' THEN 3
      ELSE NULL
   END

Проверьте Определение пользовательского порядка сортировки для более подробной информации.

1 голос
/ 28 августа 2009

Пара решений:

Создайте еще одну таблицу с вашим порядком сортировки, соедините столбец A с новой таблицей (что-то вроде TERM как STRING, SORTORDER как INT). Поскольку вещи всегда меняются, это позволяет избежать жесткого кодирования чего-либо и является решением, которое я бы порекомендовал для реального использования.

Если вы не хотите гибко добавлять новые условия и заказы, просто используйте оператор CASE, чтобы преобразовать каждый термин в число:

CASE A WHEN 'stack' THEN 1 WHEN 'over' THEN 2 WHEN 'flow' THEN 3 END

и используйте его в своем ЗАКАЗЕ.

0 голосов
/ 28 августа 2009

Если у вас есть много элементов с пользовательским порядком, вы можете добавить эти элементы в таблицу и присвоить им значение. Соединитесь с таблицей, и каждый столбец может иметь пользовательское значение заказа.

   select 
      main.a,
      main.b,
      main.c 
   from dbo.tblMain main
   left join tblOrder rank on rank.a = main.a 
   order by rank.OrderValue

Если у вас есть только 3 элемента, как предложено в вашем вопросе, вы можете использовать регистр в порядке по ...

   select 
      * 
   from dbo.tblMain 
   order by case 
      when a='stack' then 1 
      when a='flow' then 2 
      when a='over' then 3 
      else 4
   end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...