我正在研究一个项目,我有一个奇怪的要求。
我有一个表A
,其中包含字段(TechID(Primary Key), Orders (INTEGER NUMBER),Name (Varchar))
。
Orders
的值可以是0, 1, 2, 3, .......
我的任务是显示由Orders
字段排序的表格的内容。首先显示Orders
字段的值为1
的行,然后依次显示其中的行。必须在末尾显示值为0
的行。如果所有Orders
字段的值均为0,则需要按TechID
字段对表格进行排序。
有关实现这一目标的任何想法?这可以通过SQL查询实现,还是应该为此编写T-Sql脚本?
答案 0 :(得分:9)
这很简单:
select *
from A
order by case Orders -- 1. Orders values
when 0 then 2 -- of zero collate after
else 1 -- non-zero Orders values
end , --
Orders , -- 2. Then collate by Orders value proper
TechID -- 3. Then by TechID
答案 1 :(得分:3)
实际上没有测试它,但这个一般的想法应该有效:
SELECT * FROM A
ORDER BY
CASE Orders WHEN 0 THEN 2147483647 ELSE Orders END,
TechID
注意:这假设Orders
是int
。如果它的bigint
改为使用9,223,372,036,854,775,807。
答案 2 :(得分:1)
在ORDER BY子句中使用case语句。当所有订单值均为0时,TechID的二级排序将按照您的要求对TechID进行排序。
SELECT *
FROM A
ORDER BY
Case
When (Orders = 0) Then 9999
Else Orders
End,
TechID
答案 3 :(得分:0)
不知道它是否适用于oracle的其他数据库
SELECT * 从T ORDER BY命令空值最后