我是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
我该怎么做?有人请帮帮我
答案 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;