3

我是 SQL Server 的新手。请帮我解决我的以下问题。

我有一张如下表,

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

我现在想以这样的方式编写一个查询,即所有数量等于或大于 400 且状态为 OK 的作业将首先出现,然后是数量等于或大于 400 且状态为 HOLD 的作业。然后会出现所有数量小于 400 且状态为 OK 的作业,然后会出现数量少于 400 且状态为 HOLD 的作业。

这是我的结果应该如何显示。(抱歉以上令人困惑的段落)

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;

此外,如果 OK 和 HOLD 是 [Status] 仅有的两种可能性,您可以说:

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