3

私はSQLServerの初心者です。私の以下の問題を手伝ってください。

私は以下のようなテーブルを持っています、

Job  Quantity Status
1      100      OK
2      400      HOLD
3      200      HOLD
4      450      OK

数量が400以上でステータスがOKのすべてのジョブが最初に表示され、次に数量が400以上でステータスがHOLDのジョブが最初に表示されるようにクエリを記述したいと思います。次に、ステータスOKの数量が400未満のすべてのジョブが表示され、その後、ステータスHOLDの数量が400未満のジョブが表示されます。

これが私の結果がどのように表示されるかです。(上記の紛らわしい段落でごめんなさい)

Job  Quantity Status
4      450      OK
2      400      HOLD
1      100      OK
3      200      HOLD

どうすればよいですか?誰か助けてください

4

2 に答える 2

6
SELECT Job, Quantity, Status 
  FROM myTable
 ORDER BY CASE WHEN Quantity >= 400 AND Status = 'OK' THEN 1 
               WHEN Quantity >= 400 AND Status = 'Hold' THEN 2
               WHEN Status = 'OK' THEN 3
               ELSE 4
          END
于 2012-05-21T20:05:56.450 に答える
1

やや冗長な代替手段を次に示します。

ORDER BY Quantity / 400 DESC,
  CASE [Status] WHEN 'OK' THEN 1 ELSE 2 END;

これは、数量 >= 800 のジョブをより高い優先度として扱います。より良い代替案はおそらく次のとおりです。

ORDER BY CASE Quantity / 400 WHEN 0 THEN 2 ELSE 1 END,
  CASE [Status] WHEN 'OK' THEN 1 ELSE 2 END;

また、[Status] の可能性が OK と HOLD の 2 つしかない場合は、次のように言えます。

ORDER BY CASE Quantity / 400 WHEN 0 THEN 2 ELSE 1 END,
  [Status] DESC;
于 2012-05-21T20:24:06.397 に答える