现在表结构如下:
id   name
1    aa
1    bb
1    cc
2    gg
2    ff
要得到的结果
id   name
1    aa,bb,cc
2    gg,ff

解决方案 »

  1.   

    SQL> create table t(col1 varchar2(10),col2 varchar2(10));表已创建。SQL>
    SQL> insert into t values('001','vl1');已创建 1 行。SQL> insert into t values('001','vl2');已创建 1 行。SQL> insert into t values('001','vl3');已创建 1 行。SQL> insert into t values('002','vl1');已创建 1 行。SQL> insert into t values('002','vl2');已创建 1 行。SQL> insert into t values('002','vl3');已创建 1 行。SQL> insert into t values('002','vl4');已创建 1 行。SQL> COMMIT;提交完成。SQL> select * from t;COL1       COL2
    ---------- ----------
    001        vl1
    001        vl2
    001        vl3
    002        vl1
    002        vl2
    002        vl3
    002        vl4已选择7行。SQL> COL COL2 FORMAT A20SQL>  SELECT COL1,LTRIM(MAX(SYS_CONNECT_BY_PATH(COL2,',')),',') COL2
      2   FROM
      3   (
      4   SELECT COL1,COL2,MIN(COL2) OVER(PARTITION BY COL1) COL2_MIN,
      5  (ROW_NUMBER() OVER(ORDER BY COL1,COL2))+(DENSE_RANK() OVER (ORDER BY COL1)) NUMID
      6   FROM T
      7   )
      8   START WITH COL2=COL2_MIN CONNECT BY NUMID-1=PRIOR NUMID
      9   GROUP BY COL1;COL1       COL2
    ---------- --------------------
    001        vl1,vl2,vl3
    002        vl1,vl2,vl3,vl4
      

  2.   

    能否请boydgmx解释一下这个sql啊
      

  3.   

    TO  boydgmx(梦霄) :
    呵呵!跟我學的嗎?那太好了,說明我為Oracle版塊作出貢獻了!其實對於這種類似的問題有三種解決方式的,一是使用函數,這是最簡單常用的方法,二就是使用我常喜歡用的樹形遍歷(也就是你在此貼中給出的方法),三是使用一個臨時表再使用一個UPDATE即可,這種方法也比較簡單,速度快,但是此種方式隻能在缺乏層次查詢的SQL Server中使用,四是最笨的也是效率最低的方法,就是使用遊標加循環的方式。
      

  4.   

    用來用去,覺得SQL SERVER和Oracle在語法和功能方面各有短缺,有些功能或方法在SQL SERVER中相當容易實現,但在Oracle中幾乎無法達到,而有些功能或方法在Oracle中很容易實現,但在SQL SERVER中卻是無法實現。
    真讓人鬱悶!!!!!!!!!