不同语句后的自定义顺序

时间:2012-06-01 18:12:40

标签: sql db2 sql-order-by

我想制作一个自定义订单:IN,OUT,FINISHED。
如果我离开案例陈述,我将进入FINISHED,IN,OUT。 我找到了这个解决方案,但它对我不起作用 - 我收到了错误。

select  distinct 'IN' as STATUS,
(select count(*) ...)
from table

UNION ALL

select  distinct 'OUT',
(select count(*) ...)
from table

UNION ALL

select  distinct 'FINISHED',
(select count(*) ...)
from table

order by 
case STATUS
    when 'IN' then 1
    when 'OUT' then 2
    when 'FINISHED' then 3
end

1 个答案:

答案 0 :(得分:1)

您提供的查询存在一些语法错误。我认为以下内容可以解决您的问题:

select *
from ((select distinct 'IN' as statusA, (select count(*) ...
       from table
      )
      union all
      (select distinct 'OUT',  (select count(*) ...)
       from table 
      )
      union all
      (select distinct 'FINISHED',  (select count(*) ...) 
       from table
      )
     ) t
order by status,
      (case STATUSA when 'IN' then 1
                    when 'OUT' then 2
                    when 'FINISHED' then 3
       end)

您的原始问题可能有多种原因。您错过了第一个子查询中的“IN”。您在订单状态之后缺少逗号。并且,一些数据库通过一系列联合将最终订单应用于最后一个查询(尽管我认为DB2正确地执行了此操作)。