2015-03-12 6 views
2

У меня есть таблица вроде этого:Tricky сортировать по 2 разным столбцам

RefNum   Date  Status 
---------------------------------- 
20276  12/7/2014  Approved 
56332  13/7/2014  Approved 
HS785  11/7/2014  Approved 
52355  10/7/2014  Approved 
HS566  15/7/2014  Approved 

Мне нужно отсортировать его по date колонку. Но сложная часть - мне также нужен refnum, который начинался с «HS», чтобы быть в нижней части сортировки результатов по дате.

Так что результат должен быть что-то вроде этого

RefNum   Date  Status 
---------------------------------- 
52355  10/7/2014  Approved 
20276  12/7/2014  Approved 
56332  13/7/2014  Approved 
HS785  11/7/2014  Approved 
HS566  15/7/2014  Approved 

И я определенно не могу сделать, как этот

SELECT * 
FROM tbl1 
ORDER BY Date, RefNum 

, потому что он будет возвращать список сортировать по дате первой.

Любые идеи?

ответ

6

Приготовьтесь получить ваш ум взорван: вы можете использовать case в order by:

select * 
from tbl 
order by 
    case when RefNum like 'HS%' then 1 else 0 end, 
    Date 

SQL Server позволяет использовать case практически в любом месте - group by, order by, агрегатные функции ... это очень мощный инструмент:)

0

Я думаю, что ваш окончательный запрос будет что-то вроде этого:

SELECT 
    * 
FROM 
    tbl1 
ORDER BY 
    CASE 
    WHEN RefNum LIKE `HS%` THEN 1 
    ELSE 0 
    END 
    Date, 
    RefNum 

Таким образом, он отправит целые HS% данные до конца, и внутри этих групп предоставит заказ Date и RefNum.

Смежные вопросы