Génération de listes séparées par des virgules dans DB2 à l'aide de LISTAGG
Ce guide montre comment créer des listes de valeurs de colonnes séparées par des virgules et regroupées par une autre colonne dans DB2. La fonction LISTAGG
est essentielle pour y parvenir.
Scénario :
Imaginez un tableau avec des colonnes ID
et Role
, où chaque ID
peut avoir plusieurs Roles
. L'objectif est de générer une liste de rôles séparés par des virgules pour chaque identifiant unique.
Exemples de données :
ID | Role |
---|---|
4555 | 2 |
4555 | 3 |
4555 | 4 |
Sortie souhaitée :
<code>4555, 2,3,4</code>
Solution utilisant LISTAGG :
La fonctionDB2 LISTAGG
concatène efficacement les valeurs au sein d'un groupe. La syntaxe est :
<code class="language-sql">LISTAGG(column_name, delimiter) WITHIN GROUP (ORDER BY column_name) OVER (PARTITION BY group_column)</code>
Exemple de requête :
Utilisons un exemple de tableau nommé myTable
avec les colonnes id
et category
:
<code class="language-sql">CREATE TABLE myTable (id INT, category INT); INSERT INTO myTable VALUES (1, 1); INSERT INTO myTable VALUES (2, 2); INSERT INTO myTable VALUES (5, 1); INSERT INTO myTable VALUES (3, 1); INSERT INTO myTable VALUES (4, 2);</code>
Pour obtenir des valeurs id
séparées par des virgules pour chaque category
:
<code class="language-sql">SELECT category, LISTAGG(id, ', ') WITHIN GROUP (ORDER BY id ASC) AS ids FROM myTable GROUP BY category;</code>
Résultat :
<code>CATEGORY | IDS ---------+----- 1 | 1, 3, 5 2 | 2, 4</code>
Cette requête regroupe les lignes par category
, classe les valeurs id
dans chaque groupe, puis utilise LISTAGG
pour les concaténer en une seule chaîne séparée par des virgules. Le résultat affiche la liste des identifiants séparés par des virgules pour chaque catégorie. Cette approche résout efficacement le problème de la génération de listes séparées par des virgules basées sur le regroupement dans DB2.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!