解决方案 »

  1.   

    你的字段名比较复杂,假设字段分别为A,B,C
    WITH T AS (
    select rn,REGEXP_SUBSTR(A, '[^,]+', 1, LEVEL) AS A,B,C
    from (select A,B,C,rownum rn from MV_DWTJ)
    CONNECT BY LEVEL <= REGEXP_COUNT( A, ',') + 1
    and rn= prior rn
    and prior dbms_random.value is not null
    )
    SELECT A,SUM(B),SUM(C)
    FROM T GROUP BY A
      

  2.   

    不对呀,我按照你写的把abc替换掉以后,查询出来的还是带逗号的
      

  3.   

    with T AS (
    select REGEXP_SUBSTR(A, '[^,]+', 1, LEVEL) A,B,C
    from MV_DWTJ
    CONNECT BY LEVEL <= REGEXP_COUNT(A, ',') + 1
    and rowid= prior rowid
    and prior dbms_random.value is not null
    )
    SELECT A,SUM(B),SUM(C)
    FROM T GROUP BY A
    另外注意你数据中的逗号是中文逗号还是英文逗号,正则表达式需要相应调整
      

  4.   

    regexp_count里面的逗号也改成中文的
      

  5.   

    这样是不是你想要的select
        b.code,
        max(b.zh_cn_caption),
        sum(a.before_income)
    from
        mv_dwtj a,
        const_dictionary b
    where
        instr(a.g_chk_characteristic_name,b.zh_cn_caption) > 0
    group by
        b.code
    /*order by 
        b.code */
      

  6.   

    全部分出来了,但是查出来的数据好像笛卡尔乘积了,sum算出来的树不对,多出来了很多,如上图,本来“其他”中的数应该是0,现在不是
      

  7.   

    这样是不是你想要的select
        b.code,
        max(b.zh_cn_caption),
        sum(a.before_income)
    from
        mv_dwtj a,
        const_dictionary b
    where
        instr(a.g_chk_characteristic_name,b.zh_cn_caption) > 0
    group by
        b.code
    /*order by 
        b.code */
    这种方法我想过,但是因为两个表没有完全建立链接,查出来的数乘积的厉害,sum的数完全不对了……
      

  8.   


    这样是不是你想要的select
        b.code,
        max(b.zh_cn_caption),
        sum(a.before_income)
    from
        mv_dwtj a,
        const_dictionary b
    where
        instr(a.g_chk_characteristic_name,b.zh_cn_caption) > 0
    group by
        b.code
    /*order by 
        b.code */
    楼主,你看清楚,“其他” 在你给的截图中,就有两条,为什么是0呢
    我觉得这种是正确的
      

  9.   

    那就是需求描述的不够准确了,就拿你初始给的数据来说,你画红框的那行就包含其他,before_income就不是0,求和肯定也不是0,你的0是怎么计算来的
      

  10.   

    这么写思路没问题,但是注意细节,按你目前写法,“其他”和“其他单位特性”就区分不出来了,还需要处理下
    这样写真的有笛卡尔乘积,是为什么呢?怎么处理
    ,这个sql困扰了我一下午了
      

  11.   

    按bw555 说的,“其他”和“其他单位特性”就区分不出来了,造成了笛卡尔积
    你可以考虑在这个sql的基础上修改下select
        b.code,
        max(b.zh_cn_caption),
        sum(a.before_income)
    from
        mv_dwtj a,
        const_dictionary b
    where
        instr( ','||a.g_chk_characteristic_name||',',','||b.zh_cn_caption||',') > 0
    group by
        b.code
    /*order by 
        b.code */