2011-08-05 19 views
3
select 
     case status 
      when 'AR' then 1 
      when 'AV' then 2 
      when 'AN' then 3 
      when 'AD' then 4 
      when 'AC' then 5 
      when 'AY' then 6 
      when 'AH' then 7 
      else 8 
     end 'status_order', COUNT(*) 
from dn_appeal_request 
group by 
     case status 
      when 'AR' then 1 
      when 'AV' then 2 
      when 'AN' then 3 
      when 'AD' then 4 
      when 'AC' then 5 
      when 'AY' then 6 
      when 'AH' then 7 
      else 8 
     end 

選択に使用されているのと同じケースステートメントを使用せずにグループを行う方法はありますか?質問別グループ

答えて

1

あなたは、サブクエリを使用して、case文の繰り返しを避けることができます。あなたは値をグループ化する必要があります。

select D.status_order, COUNT(*) 
from (
     select case status 
       when 'AR' then 1 
       when 'AV' then 2 
       when 'AN' then 3 
       when 'AD' then 4 
       when 'AC' then 5 
       when 'AY' then 6 
       when 'AH' then 7 
       else 8 
       end 'status_order' 
     from dn_appeal_request 
    ) as D 
group by D.status_order 
+0

おかげミカエルと複数の行を持つことになりますwhen' .. –

0

いいえ、上のサンプルでGROUP BY句のCASEを回避する方法はありません。

どうしても自分自身を繰り返したくなかった場合は、あなたができるこの問題を回避するには、派生テーブルを作成することです:

SELECT CASE [Status] when 'AR' then 1    
     when 'AV' then 2    
     when 'AN' then 3    
     when 'AD' then 4    
     when 'AC' then 5    
     when 'AY' then 6    
     when 'AH' then 7    
     else 8   
     END AS status_order 
     ,Total 
FROM (
    SELECT [Status], COUNT(*) AS Total 
    FROM dn_appeal_request 
    GROUP BY [Status] 
) AS Foo 
+0

によってキャッチされていない複数の値がある場合 'は' status' 8 –