以下表数据:
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;