0

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
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 の status の後にカンマがありません。また、一部のデータベースでは、一連のユニオンによる最終的な順序を最後のクエリにのみ適用します (ただし、DB2 はこれを正しく行うと思います)。

于 2012-06-01T18:19:45.057 に答える