code item
 101  a
 101  b
 101  c
 101  d 
 102  a
 102  c
 102  d
 103  a
 103  d
 104  c
 统计后到得到
 101  a、b、c、d
 102  a、c、d
 103  a、d
 104  c我用的是DB2

解决方案 »

  1.   

    都是两列
    code   item
     101 a、b、c、d
     102 a、c、d
     103 a、d
     104 c
      

  2.   

    http://www.hanhe-tech.com:8089/blog/246-6398.html怕你访问不了,原文内容如下:潇潇提出的问题是数据库里面著名的“行列转换”问题,现在oracle10g以上版本可以直接用一个函数wmsys.wm_concat来实现。但DB2 数据库是一个非常传统的数据库,可以用守旧来形容,不少其他数据库的函数在DB2里面只能用一大段SQL语句来实现,例如“行列转换”只能用递归查询。
        假设有这么一个表:
            A        B
            1        a
            2        b
            1        c
            1        d
            3        e
            3        f
    查询的结果为:
         1          a,c,d
         2          b
         3          e,f
    那么DB2的写法是这样的:
        WITH T1(A,B,NUM) AS  
    (  
        Select A,B,ROW_NUMBER() OVER(PARTITION BY A orDER BY ID) FROM T    
    ),  
    T2(RA,RB,NUM) AS  
    (  
    Select A,CHAR(B,10),NUM FROM T1 Where NUM = 1  
    UNION ALL  
    Select T2.RA,RTRIM(T2.RB)||','||T1.B,T1.NUM FROM T1 , T2 Where T1.NUM = T2.NUM + 1 AND T1.A = T2.RA  
    )  
    Select    
        RA,RB FROM T2    
    Where    
        NUM = ( Select MAX(NUM) FROM T2 TEMP Where TEMP.RA = T2.RA)    
    orDER BY RA  
    大概的结构是这样的:
    with  
    表达式(包括递归的起点)
    union all
    表达式(递归的步骤)
      

  3.   

    上次我也遇到过同样的问题
    在那个基础上改了一点with t1 as 
    (
       select id,name,row_number() over(partition by id order by id )as num from test.tbr
    ),
    t2(id,name,num)as
    (
      select id,name,num from t1 where num=1
    union all
    select t2.id,rtrim(t2.name)||','||t1.name,t1.num from t1,t2 where t1.num=t2.num+1 and t1.id=t2.id
    )
    select id,name from t2 where num=(select max(num) from t2 as tmp where tmp.id=t2.id) order by id;那个递归有点难懂
    递归连接
    每次连接1行 然后rownumber+1
    最后取出最大行号的行
      

  4.   

    原文:http://blog.csdn.net/shangboerds/archive/2009/12/20/5044972.aspx
      

  5.   

    有难度,SQL也递归,有没有更好(更简单的/通俗易懂的)的解决方案?
      

  6.   


    行列转换本来就比较复杂。你不要用sql,就自己用程序写。没有更简单的方法了。
      

  7.   

    是要查询吗?用Oracle倒是可以写个存储过程,用到循环和游标