J'ai besoin d'extraire des données de ma base de données DB2. J'ai des mots clés dans un tableau et chaque mot clé est une ligne distincte. Dans l'extrait, je veux avoir tous les mots clés pour tous les ID dans une chaîne séparée par une virgule.
Donc, pour expliquer: j'ai de telles données
ID | keyword
===========================
prd1 | test
---------------------------
prd2 | keywords
---------------------------
prd1 | flower
---------------------------
prd4 | picture
---------------------------
prd7 | 234567
---------------------------
prd9 | reored
---------------------------
prd4 | finland
---------------------------
prd0 | 983y23
---------------------------
prd4 | code
---------------------------
prd9 | tratata
Et voici un exemple de ce que je veux réaliser:
ID | keyword concatenated
===========================
prd1 | test, flower
---------------------------
prd2 | keywords
---------------------------
prd4 | picture, finland, code
---------------------------
prd7 | 234567
---------------------------
prd9 | reored, tratata
---------------------------
prd0 | 983y23
---------------------------
J'ai essayé avec concat
:
SELECT concat(keyword) FROM table.keywordTbl
J'ai essayé avec certaines commandes spécifiques à DB2:
SELECT IDs, Sys_Connect_By_Path(varchar(keyword), ', ') AS "keyword concatenated" FROM table.keywordTbl START WITH ID='prd1' CONNECT BY ID=keyword
PIVOT
ne convient pas à cela, mais je l'ai également vérifié. GROUP_CONCAT
ne fonctionne pas non plus.
Bien sûr, aucun de ces travaux ...
Avez-vous des indices pour moi?
Essayez de modifier la requête en fonction du script ci-dessous
SELECT
ID,
SUBSTR(xmlserialize(xmlagg(xmltext(CONCAT( ', ',keyword))) as VARCHAR(1024)), 3) AS "keyword concatenated"
FROM table.keywordTbl
GROUP BY ID
Vous pouvez également utiliser la fonction LISTAGG()
, si vous avez DB2 v9.7+
. Le premier paramètre est la colonne, le second est le séparateur.
SELECT
ID
, LISTAGG(keyword, ',') AS "keyword concatenated"
FROM table.keywordTbl
GROUP BY ID