2个表,
表A:
CGID NAME
1 q
2 w
3 e
4 r
5 t
6 y
7 u
8 i
9 o
10 p表B:
CGID1 SCORE1 CGID2 SCORE2 CGID3 SCORE3
1 1 2 2 3 3
4 4 5 5 6 6
7 7 8 8 9 9通过这两个表联合查询,得到最终的结果如下:CGID NAME SCORE
1,2,3 q,w,e 1,2,3
4,5,6 r,t,y 4,5,6
7,8,9 u,I,o 7,8,9请教大家赐教! 

解决方案 »

  1.   

    a和b是每三位一关联?
    10G 可以用WMSYS.WM_CONCAT实现
      

  2.   

    SELECT a.cgid, a.NAME, b.score1 || ',' || b.score2 || ',' || b.score3 score
      FROM (SELECT   TRUNC ((cgid - 1) / 3) cgid1, wmsys.wm_concat (cgid) cgid,
                     wmsys.wm_concat (NAME) NAME
                FROM a
            GROUP BY TRUNC ((cgid - 1) / 3)) a,
           b
     WHERE a.cgid1 = b.cgid1
      

  3.   

    SQL> select wmsys.wm_concat(cgid) CGID,
      2         wmsys.wm_concat(name) name,
      3         wmsys.wm_concat(score1) score
      4    from (select cgid, name, score1
      5            from a,
      6                 (select cgid1, score1
      7                    from b
      8                  union
      9                  select cgid2, score2
     10                    from b
     11                  union
     12                  select cgid3, score3 from b) b
     13           where a.cgid = b.cgid1)
     14   group by trunc((cgid + 2) / 3, 0)
     15  ;
     
    CGID       NAME       SCORE
    ---------- ---------- ----------
    1,2,3      q,w,e      1,2,3
    4,6,5      r,y,t      4,6,5
    7,8,9      u,i,o      7,9,8
      

  4.   

    wmsys.wm_concat的几个用法:http://space.itpub.net/?13387766/viewspace-448841
      

  5.   

    --try it
    select CGID1||','|| CGID2||','||CGID3 as CGID,
           NAME1||','|| NAME2||','||NAME3 as NAME,
           SCORE1||','|| SCORE2||','||SCORE3 as SCORE
      FROM (select B.CGID1,
                   B.SCORE1,
                   B.CGID2,
                   B.SCORE2,
                   B.CGID3,
                   B.SCORE3,
                   max(decode(B.CGID1, A.CGID, A.NAME, '')) NAME1,
                   max(decode(B.CGID2, A.CGID, A.NAME, '')) NAME2,
                   max(decode(B.CGID3, A.CGID, A.NAME, '')) NAME3,
              from A, B
             where A.CGID = B.CGID1(+)) t
      

  6.   

    竟然排序不对,4.6.5还得加个distinct下面的才完全正确
    SQL> select wmsys.wm_concat(distinct cgid) CGID,
      2         wmsys.wm_concat(distinct name) name,
      3         wmsys.wm_concat(distinct score1) score
      4    from (select cgid, name, score1
      5            from a,
      6                 (select cgid1, score1
      7                    from b
      8                  union
      9                  select cgid2, score2
     10                    from b
     11                  union
     12                  select cgid3, score3 from b) b
     13           where a.cgid = b.cgid1)
     14   group by trunc((cgid + 2) / 3, 0);
     
    CGID       NAME       SCORE
    ---------- ---------- ----------
    1,2,3      e,q,w      1,2,3
    4,5,6      r,t,y      4,5,6
    7,8,9      i,o,u      7,8,9
      

  7.   

    上面的多加了个distinctname部分顺序不对?
    SQL> select wmsys.wm_concat(distinct cgid) CGID,
      2         wmsys.wm_concat( name) name,
      3         wmsys.wm_concat(distinct score1) score
      4    from (select cgid, name, score1
      5            from a,
      6                 (select cgid1, score1
      7                    from b
      8                  union
      9                  select cgid2, score2
     10                    from b
     11                  union
     12                  select cgid3, score3 from b) b
     13           where a.cgid = b.cgid1)
     14   group by trunc((cgid + 2) / 3);
     
    CGID       NAME       SCORE
    ---------- ---------- ----------
    1,2,3      q,w,e      1,2,3
    4,5,6      r,y,t      4,5,6
    7,8,9      u,i,o      7,8,9
     
      

  8.   

    上面的才是完全正确的答案,为什么要加distinct呢。不了解