Группировать по вопросу - PullRequest
3 голосов
/ 05 августа 2011
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 

есть ли способ создать группу, не используя ту же инструкцию case, что и в select?

Ответы [ 2 ]

1 голос
/ 05 августа 2011

Вы можете избежать повторения вашего утверждения с помощью подзапроса.Вам нужно сгруппировать по значению.

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 голосов
/ 05 августа 2011

Нет, нет способа избежать CASE в предложении GROUP BY, в вашем примере выше.

Если вы абсолютно не хотите повторяться, вы можете обойти эту проблему, чтобы создать производную таблицу:

 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...