Сортировка результатов по столбцу char (1) - PullRequest
0 голосов
/ 20 марта 2010

У меня есть хранимая процедура, которая в основном делает что-то вроде

select top 1 expiryDate, flag, (bunch of other columns)
from someTable
(bunch of joins)
order by expiryDate desc

Так что это захватит запись, срок действия которой истекает последним. Это работает в большинстве случаев, за исключением того, что у некоторых записей есть флаг, равный char(1). В большинстве случаев это просто Y или N.

Так что будет возвращено что-то вроде

2010-12-31    N
2010-10-05    Y
2010-08-05    N
2010-03-01    F
2010-01-31    N

В большинстве случаев это работает, но есть ли способ также упорядочить его по столбцу «Флаг»? Поэтому я бы хотел сгруппировать результаты по Y, затем N и F, и любые другие флаги могут быть последними в любом порядке. Я думал, что это будет просто заказ, но поскольку флаги не взвешены по буквенному значению, я немного озадачен. (Примечание: это не мои таблицы, я не знаю, было ли использование таких символов хорошей идеей или нет, но это не то, что я могу изменить).

Ответы [ 2 ]

3 голосов
/ 20 марта 2010

Вам нужна помощь оператора CASE

Order By expiryDate desc, 

   CASE flag
      When 'Y' THEN 1
      When 'N' THEN 2
      When 'F' THEN 3
      ELSE 999
   END ASC
0 голосов
/ 20 марта 2010

Вы можете заказать по нескольким колонкам:

select top 1 expiryDate, flag, (bunch of other columns)
from someTable
(bunch of joins)
order by flag /* asc/desc */, expiryDate desc
...