2013-08-05 3 views
1

я есть столбец, который может содержать 6 значений (1,2,3, А, В, С)столбец сумма подсчитывает для двух различных значений

я могу рассчитывать (*) их так это выглядит, как этот

select mycol, count(*) as ttl from mytable group by mycol; 
    mycol ttl 
    1  46 
    2  53 
    3  10 
    A  5 
    B  4 
    C  2 

, но я хочу суммировать 1s и как, и 2s и Bs как этот

mycol total 
var1 51 
var2 57 
var3 12 

будет случай заявление работы для этого? как случай 1 или А, то относиться к ним так же

ответ

3

Да, case заявление будет работать следующим образом:

select (case when mycol in ('1', 'var1') then 'var1' 
      when mycol in ('2', 'var2') then 'var2' 
      when mycol in ('3', 'var3') then 'var3' 
     end), 
     sum(ttl) as Total 
from mytable t 
group by (case when mycol in ('1', 'var1') then 'var1' 
       when mycol in ('2', 'var2') then 'var2' 
       when mycol in ('3', 'var3') then 'var3' 
      end); 

EDIT:

Если вы просто данные с несколькими строками для каждого значения:

select (case when mycol in ('1', 'var1') then 'var1' 
      when mycol in ('2', 'var2') then 'var2' 
      when mycol in ('3', 'var3') then 'var3' 
     end), 
     count(*) as Total 
from mytable t 
group by (case when mycol in ('1', 'var1') then 'var1' 
       when mycol in ('2', 'var2') then 'var2' 
       when mycol in ('3', 'var3') then 'var3' 
      end); 
+0

'GROUP BY 1' будет причудливо;) – jaczes

+0

@jaczes. , , Да, это красивее. Но это не стандартный SQL и поддерживается несколькими двигателями SQL. –

Смежные вопросы