一张表A(A1,A2,A3,A4,A5)
A4字段为系统分类
A5字段为手工分类
A4肯定有值
A5不一定
数据可能是这样
(A1,A2,A3,正常, )
(A1,A2,A3,正常,关注 )
(A1,A2,A3,正常, )
(A1,A2,A3,正常,次级 )
(A1,A2,A3,关注,正常 )
(A1,A2,A3,正常,正常 )判断分类的条件是如果只有系统分类有值,则以系统分类结果为准
如果系统分类和手工分类都有值,则以手工分类结果为准
现在要写个sql语句,取表中每个分类的汇总,比如分类结果正常多少条,关注多少条,次级多少条等等

解决方案 »

  1.   

    with tmp as (
    select 'A1' name1, 'A2' name2, 'A3' name3, '正常' category_sys, '' category_ha from dual union all
    select 'A1', 'A2', 'A3', '正常', '关注' from dual union all
    select 'A1', 'A2', 'A3', '正常', ''     from dual union all
    select 'A1', 'A2', 'A3', '正常', '次级' from dual union all
    select 'A1', 'A2', 'A3', '关注', '正常' from dual union all
    select 'A1', 'A2', 'A3', '正常', '正常' from dual )
    SELECT name1, name2, name3, COALESCE(a.category_ha, a.category_sys), COUNT(*)
      from tmp a
     group BY name1, name2, name3, COALESCE(a.category_ha, a.category_sys)
      

  2.   

    select decode(A5,NULL,A4,A5),COUNT(*) FROM A GROUP BY decode(A5,NULL,A4,A5);