2012-10-18 34 views
1

在具體的名單我使用這個查詢,使事件如何排序在SQL

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 

現在我想排序相同的SQL,爲了在今年的項目list3名單。這可能嗎?

+0

你可以澄清,請 - 你想在今年只訂購記錄時情況=「項目list3」? –

+0

雅我想再次排序list3 order by year,並保持其他人是原樣。 – DkPathak

+0

我想再次排序list3 order by year .... – DkPathak

回答

0

我得到了解決。 爲了通過,我只是編輯爲

order by sortlist, case when sortlist='list3' then year else null end, 
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 
+0

的月份和日期,謝謝...讓我們檢查它... – DkPathak

+0

如果您希望數據按日期或年份排序,您可以編寫'order by sortlist,case when e.year> 2013 then e.year else date end' –

+0

空指針異常正在提交 – DkPathak