2012-05-02 25 views
1

我有一個表,表A有條件的排序,看起來像這樣:T-SQL:兩列

ColA ColB 
0  20 
1  10 
0  5 
1  15 

我要對行進行排序,以便在那裏可樂= 0首先列出的所有記錄,然後這些記錄按ColB遞增排序。列出ColA = 0的所有行後,我想列出ColA = 1的所有行,但這些行按ColB遞減排序。

結果應該是這樣的:

ColA ColB 
0  5 
0  20 
1  15 
1  10 

這可能嗎?謝謝你的幫助。

回答

1
select t.ColA, t.ColB 
from t 
order by t.ColA 
    ,case when t.ColA = 0 then t.ColB end asc 
    ,case when t.ColA = 1 then t.ColB end desc 
+0

非常感謝。不知道可以在訂單條款中使用案例陳述。每天學習新東西。 – AndroidDev

+0

實際上,我無法將這種模式應用到SQL Server 2008中。 –

+0

對不起,我再次測試:實際上,問題只是代碼中輸入錯誤的逗號(在't.ColA'之後和'case'之前有兩個逗號 –

0
SELECT ColA,ColB 
FROM table 
ORDER BY 
ColA, (CASE WHEN ColA = 1 THEN -1 * ColB ELSE ColB END) 
+0

絕對比oryol更短的解決方案,但乘法運算可能會帶來性能問題。 – AndroidDev