,如果您有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
你可以澄清,請 - 你想在今年只訂購記錄時情況=「項目list3」? –
雅我想再次排序list3 order by year,並保持其他人是原樣。 – DkPathak
我想再次排序list3 order by year .... – DkPathak