如何组合两个SELECT语句的结果

时间:2012-05-21 20:03:00

标签: sql-server select

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

我有一张如下表格,

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

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

以下是我的结果应该如何显示。 (对不起上面这个令人困惑的段落)

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

我该怎么做?有人请帮帮我

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:1)

以下是一些略显冗长的替代方案:

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

这会将数量> gt = 800的作业视为更高优先级。一个更好的选择可能是:

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

如果OK和HOLD是[状态]的唯一两种可能,你可以说:

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