表fxb:id type  flag
1   b     0
2   a     1
3   b     0
4   b     2
5   b     1
6   a     0
7   a      1
8   a      2
..............select count(*),type
from  fxb group by type,这样就能统计出每个类型总共有几个
现在我想每个类型总共有几个,状态0有几个,状态1为几个,状态2的为几个,各位大师能不能给指点下 

解决方案 »

  1.   

    select type,flag,count(*),type
    from fxb group by type,flag
      

  2.   

    --这个层次汇总
    with test as(
      select 1 id,'b' type, 0 flag from dual union all
      select 2 id,'a' type, 1 flag from dual union all
      select 3 id,'b' type, 0 flag from dual union all
      select 4 id,'b' type, 2 flag from dual union all
      select 5 id,'b' type, 1 flag from dual union all
      select 6 id,'a' type, 0 flag from dual union all
      select 7 id,'a' type, 1 flag from dual union all
      select 8 id,'a' type, 2 flag from dual)
    SELECT TYPE, decode(flag, NULL, '合计', flag) flag, COUNT(*) FROM test GROUP BY ROLLUP(TYPE, flag);
      

  3.   

    每个类型总共有几个:select count(*) over(departion by type) from fxb
    状态0有几个,状态1为几个,状态2的为几个:select count(*) over(departion by flag) from fxb