有一表如下(t1)a    b    c 
A1   B1   3
A1   B2   5
A2   B3   2
A2   B4   3想得到如下结果a     b       cA1  B1,B2     8
A2  B3,B4     5

解决方案 »

  1.   

    如果是10G的
    select a,WMSYS.WM_CONCAT(b) b, sum(c) c
    from t1
    group by a
      

  2.   

    10G以下
    select a,substr(max(sys_connect_by_path(b,',')),2) b ,sum(c) c
     from (select a.*,row_number()over(partition by a order by b) rn from t1 ) 
      group by a 
      start with rn=1 
     connect by rn-1=prior rn and a=prior a
      

  3.   

    with t1 as
    (select 'A1' a,   'B1' b ,  3  c from dual
    union all
    select 
    'A1',   'B2',   5 from dual
    union all
    select
    'A2',   'B3',   2 from dual
    union all
    select 'A2',   'B4',   3 from dual)
    select a,WMSYS.WM_CONCAT(b) b, sum(c) c 
    from t1 
    group by a结果
    Row# A B C1 A1 B1,B2 8
    2 A2 B3,B4 5
      

  4.   

    WITH t1 AS
         (SELECT 'A1' a, 'B1' b, 3 c
            FROM DUAL
          UNION ALL
          SELECT 'A1', 'B2', 5
            FROM DUAL
          UNION ALL
          SELECT 'A2', 'B3', 2
            FROM DUAL
          UNION ALL
          SELECT 'A2', 'B4', 3
            FROM DUAL)SELECT     a, SUBSTR (MAX (SYS_CONNECT_BY_PATH (b, ',')), 2) b, SUM (c) c
          FROM (SELECT a.*, ROW_NUMBER () OVER (PARTITION BY a ORDER BY b) rn
                  FROM t1 a)
      GROUP BY a
    START WITH rn = 1
    CONNECT BY rn - 1 = PRIOR rn AND a = PRIOR a
    结果
    Row# A B C1 A1 B1,B2 8
    2 A2 B3,B4 5
      

  5.   

    10G以下用这个,2楼里少写了t1 a,别名忘写,会报错的SELECT     a, SUBSTR (MAX (SYS_CONNECT_BY_PATH (b, ',')), 2) b, SUM (c) c
          FROM (SELECT a.*, ROW_NUMBER () OVER (PARTITION BY a ORDER BY b) rn
                  FROM t1 a)
      GROUP BY a
    START WITH rn = 1
    CONNECT BY rn - 1 = PRIOR rn AND a = PRIOR a