2009-08-28 2 views
2

У меня есть таблица с 3 столбцами AB C.Как сделать этот запрос в T-SQL

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

В другом слова, давайте скажем, столбец А содержит «стек», «над», «поток».

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

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

ответ

10

Вы можете использовать оператор 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 

Заканчивать Defining a Custom Sort Order для более подробной информации.

1

Несколько решений:

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

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

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

и использовать его в ORDER BY.

0

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

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

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

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 
Смежные вопросы