0

我正在做一个项目,我有一个奇怪的要求。

我有一个A带字段的表(TechID(Primary Key), Orders (INTEGER NUMBER),Name (Varchar))

的值Orders可以是0, 1, 2, 3, .......我的任务是显示按Orders字段排序的表的内容。Orders首先显示字段值为 的行1,然后依次显示其余行。值为 的行0必须显示在末尾。如果所有Orders字段的值都是 0,我需要按TechID字段对表格进行排序。

关于实现这一目标的任何想法?这可以通过 SQL 查询来实现,还是我应该为此编写一个 T-Sql 脚本?

4

4 回答 4

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
于 2012-09-17T18:25:01.817 回答
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 代替。

于 2012-09-17T18:23:11.753 回答
1

在 ORDER BY 子句中使用case语句。当所有 Orders 值为 0 时,按 TechID 的二级排序将满足您按 TechID 排序的要求。

SELECT *
FROM A
ORDER BY
   Case
      When (Orders = 0) Then 9999
      Else   Orders
   End,
   TechID
于 2012-09-17T18:21:57.493 回答
0

不知道它是否适用于oracle以外的数据库

SELECT * FROM T ORDER BY 订单空值最后

于 2012-09-17T18:50:26.697 回答