2016-12-03 6 views
0

SQLテーブルの注文に関する質問があります。と私はスタックやGoogle上のソリューションを見つけることができません。私のテーブル「スコア」は次のようになります。COALESCEを組み合わせた2列の注文方法は?

Name Total Tries Game1 Game2 Game3 
------------------------------------------ 
Sam  65  61  10  31  24    
Tom    55  11   30 
Jim  65  58  9  34  22 
Dan  62  52  10  30  22 

注:「合計」列はCOUNT(ゲーム1 +ゲーム2 +ゲーム3)です。

トムがゲーム2をプレイしなかったため、トムの合計レコードが空です。

私は(最高最低の優先順位)は次のように私のテーブルを注文したい:

  1. 空のセル(表の一番下)
  2. 合計(ASC)
  3. トライ(ASC)

だから私のテーブルが見えるように持っている:

Name Total Tries Game1 Game2 Game3 
------------------------------------------ 
Dan  62  52  10  30  22 
Jim  65  58  9  34  22 
Sam  65  61  10  31  24    
Tom    55  11   30 

どのSQLクエリを使用する必要がありますか?

これは私がこの瞬間に持っているものですが、それは一種の「試み」ではないだろう。

SELECT name, Game1+Game2+Game3 AS Total, Game1, Game2, Game3, Tries 
FROM Score 
ORDER BY CASE WHEN Tries or Game1 or Game2 or Game3 IS NULL THEN 0 ELSE 1 END DESC, 
     COALESCE(Game1,0) + COALESCE(Game2,1) + COALESCE(Game3,2) ASC 

答えて

0

はあなたのorder byCASE声明に基づいてNULL代わりのTotalを持って考えます。このOrder by

ORDER BY COALESCE(Total,99999999999) ASC,Tries ASC 

99999999999NULL値は最後にソートするようになりますし、他のレコードを昇順に

または

ORDER BY case when Total is null then 0 else 1 end desc,Total ASC,Tries ASC 
+0

感謝を注文することになる試してみてください、それが動作します! – Maarten

関連する問題