摘要:本文展示了,如何将查询结果集中的列数据拼接到一行内
数据库:Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production
现在有如下表,表名TEST_TABLE,数据如下图
希望将NAME列和REMARKS列中的数据拼接到一行。
这里我们使用Oracle的层次查询和SYS_CONNECT_BY_PATH函数来达到目的,查询语句如下:
SELECT SYS_CONNECT_BY_PATH(NAME,',') AS N, SYS_CONNECT_BY_PATH(REMARKS,',') AS R FROM( SELECT ID, LAG(ID) OVER(ORDER BY ID) AS PID, NAME, REMARKS, COUNT(ID) OVER() NUM FROM TEST_TABLE) T WHERE LEVEL = T.NUM START WITH T.PID IS NULL
语句运行结果如下:
用LAG函数为每行数据指定父数据,这样使得整个表有了层次关系。
SYS_CONNECT_BY_PATH 函数的作用是将从父节点到当前行内容以“path”或者层次元素列表的形式显示出来,在这里用来拼接数据。