SQL将行合并为一个字段(DB2)

Kar*_*ina 5 sql db2 concat

我需要从我的DB2数据库中提取一些数据。我在一个表中有关键字,每个关键字都是单独的一行。在摘录中,我希望所有ID的所有关键字都在一个字符串中,并以逗号分隔。

所以,解释一下:我有这样的数据

ID         | keyword 
===========================
prd1       | test
---------------------------
prd2       | keywords
---------------------------
prd1       | flower
---------------------------
prd4       | picture
---------------------------
prd7       | 234567
---------------------------
prd9       | reored
---------------------------
prd4       | finland
---------------------------
prd0       | 983y23
---------------------------
prd4       | code
---------------------------
prd9       | tratata
Run Code Online (Sandbox Code Playgroud)

这是我想要实现的示例:

ID         | keyword concatenated
===========================
prd1       | test, flower
---------------------------
prd2       | keywords
---------------------------
prd4       | picture, finland, code
---------------------------
prd7       | 234567
---------------------------
prd9       | reored, tratata
---------------------------
prd0       | 983y23
---------------------------
Run Code Online (Sandbox Code Playgroud)

我尝试了concat

SELECT concat(keyword) FROM table.keywordTbl
Run Code Online (Sandbox Code Playgroud)

我尝试了一些特定于DB2的命令:

SELECT IDs, Sys_Connect_By_Path(varchar(keyword), ', ') AS "keyword concatenated" FROM table.keywordTbl START WITH ID='prd1' CONNECT BY ID=keyword
Run Code Online (Sandbox Code Playgroud)

PIVOT这是不合适的,但我也进行了检查。 GROUP_CONCAT也不工作。

当然,这些都不起作用...

你对我有什么提示吗?

小智 11

LISTAGG()如果有,也可以使用function DB2 v9.7+。第一个参数是列,第二个参数是分隔符。

SELECT 
  ID
, LISTAGG(keyword, ',') AS "keyword concatenated"
    FROM table.keywordTbl 
GROUP BY ID
Run Code Online (Sandbox Code Playgroud)


moh*_*111 5

尝试根据以下脚本相应地修改查询

 SELECT 
    ID, 
    SUBSTR(xmlserialize(xmlagg(xmltext(CONCAT( ', ',keyword))) as VARCHAR(1024)), 3) AS "keyword concatenated"
    FROM table.keywordTbl 
    GROUP BY ID
Run Code Online (Sandbox Code Playgroud)