0

我想定制一个订单:IN、OUT、FINISHED。
如果我离开 case 语句,我将进入 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
4

1 回答 1

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”。您在 order by 中的状态后缺少逗号。而且,一些数据库将一系列联合中的最终 order by 仅应用于最后一个查询(尽管我认为 DB2 正确地做到了这一点)。

于 2012-06-01T18:19:45.057 回答