日期:2014-05-17  浏览次数:21097 次

列拼接成行的问题
以下表数据:
 name  column    postion
table1  a   2
table1  b   3
table1  c   1
table2  a   2
table2  b   1

要实现根据postion升序将column拼接成以下格式,请问如何实现?
table1 c,a,b
table2 b,a

------解决方案--------------------
引用:
以下表数据:
 name  column    postion
table1  a   2
table1  b   3
table1  c   1
table2  a   2
table2  b   1

要实现根据postion升序将column拼接成以下格式,请问如何实现?
table1 c,a,b
table2 b,a



WITH T AS
 (SELECT 'table1' NAME, 'a' COL, 2 PORTION
    FROM DUAL
  UNION ALL
  SELECT 'table1' NAME, 'b' COL, 3 PORTION
    FROM DUAL
  UNION ALL
  SELECT 'table1' NAME, 'c' COL, 1 PORTION
    FROM DUAL
  UNION ALL
  SELECT 'table2' NAME, 'a' COL, 2 PORTION
    FROM DUAL
  UNION ALL
  SELECT 'table2' NAME, 'b' COL, 1 PORTION
    FROM DUAL)
SELECT T2.NAME, LTRIM(MAX(SYS_CONNECT_BY_PATH(T2.COL, ',')), ',') COL
  FROM (SELECT T.*,
               ROW_NUMBER() OVER(PARTITION BY T.NAME ORDER BY T.PORTION) AS RN
          FROM T) T2
 START WITH RN = 1CONNECT BY PRIOR RN = RN - 1
        AND PRIOR T2.NAME = T2.NAME
 GROUP BY T2.NAME;