数据结果集拼接到一行

摘要:本文展示了,如何将查询结果集中的列数据拼接到一行内

数据库: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”或者层次元素列表的形式显示出来,在这里用来拼接数据。

原文地址:https://www.cnblogs.com/shenyuelan/p/3069992.html