我需要从我的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)
尝试根据以下脚本相应地修改查询
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)