2012-05-02 4 views
1

上の条件付きソート私はこのようになりますテーブル、テーブルA、持っている:T-SQL:2列

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

感謝万人。 case文がorder句で使用できることを認識していませんでした。毎日何か新しいことを学ぶ。 – AndroidDev

+0

実際には、このパターンをSQL Server 2008に適用できませんでした。 –

+0

申し訳ありませんが、もう一度テストしました。実際には、問題はちょうど誤った余分なカンマです( 't.ColA'の後、' case'の前に2つのカンマ –

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

確かにoryolのソリューションよりも短いソリューションですが、乗算にはおそらくパフォーマンスが低下します。 – AndroidDev