1

こんにちは、このクエリを使用してイベントのリストを作成しています

SELECT *, CASE
WHEN ((month > 9 OR (month =9 and days >= 22)) AND year <= 2012)then 'list1'
WHEN (year <= 2013) then 'list2' 
WHEN (year > 2013)then 'list3' 
end as sortlist from events order by sortlist, date

ここで、list3 を同じ sql で年順に並べ替えたいと思います。これは可能ですか?

4

2 に答える 2

1

SQL SERVER 2005 以降を使用している場合は、これを行うことができます

SELECT
    *,
    CALC.sortlist
from events as e
    outer apply
    (
        select
                case
                WHEN ((e.month > 9 OR (e.month =9 and e.days >= 22)) AND e.year <= 2012)then 'list1'
                WHEN (e.year <= 2013) then 'list2' 
                WHEN (e.year > 2013)then 'list3' 
            end as sortlist
    ) as CALC
order by
    CALC.sortlist, CALC.date,
    case when CALC.sortlist = 'list3' then e.year else null end

これを行うこともできますが、大文字と小文字が「list3」に等しい場合、年ごとに正確に並べ替えるわけではありません(式を変更する場合は、同様caseに変更する必要があります)order by

SELECT
    *,
    case
        WHEN ((e.month > 9 OR (e.month =9 and e.days >= 22)) AND e.year <= 2012)then 'list1'
        WHEN (e.year <= 2013) then 'list2' 
        WHEN (e.year > 2013)then 'list3' 
    end as sortlist
from events as e
order by
    sortlist, e.date,
    case when e.year > 2013 then e.year else null end
于 2012-10-18T05:31:09.240 に答える
0

私は解決策を得ました。順番に、私はちょうど編集しました

 order by sortlist, case when sortlist='list3' then year else null end,
于 2012-10-18T10:43:02.547 に答える