Maison >base de données >tutoriel mysql >Comment combiner plusieurs lignes dans une liste délimitée par des virgules dans Oracle ?
Agrégation de lignes dans des listes délimitées par des virgules dans Oracle
Oracle propose plusieurs fonctions pour consolider plusieurs lignes en une seule chaîne avec des valeurs séparées par des virgules. Il s'agit d'une tâche courante pour l'agrégation de données et la génération de rapports. Les fonctions les plus importantes sont WM_CONCAT
et LISTAGG
.
Utiliser WM_CONCAT
Disponible dans les versions Oracle antérieures à 11.2, WM_CONCAT
concatène les valeurs de plusieurs lignes à l'aide d'un délimiteur spécifié. Par exemple, pour générer une liste de noms de tables séparés par des virgules dans un schéma :
<code class="language-sql">SELECT WM_CONCAT(table_name) FROM user_tables;</code>
Employer LISTAGG
Introduit dans Oracle 11.2, LISTAGG
offre des fonctionnalités améliorées par rapport à WM_CONCAT
. Il permet un meilleur contrôle, notamment en spécifiant des délimiteurs et en gérant les valeurs NULL. L'exemple suivant crée une liste de noms de tables séparés par des virgules, en omettant les entrées NULL :
<code class="language-sql">SELECT LISTAGG(table_name, ', ') WITHIN GROUP (ORDER BY table_name) FROM user_tables;</code>
Application pratique
Imaginez une requête récupérant plusieurs dossiers de citoyenneté pour chaque individu. Pour éviter les entrées redondantes, LISTAGG
peut être utilisé comme sous-requête pour générer une seule liste de citoyenneté séparée par des virgules par personne :
<code class="language-sql">SELECT person_id, (SELECT LISTAGG(citizenship, ', ') WITHIN GROUP (ORDER BY citizenship) FROM citizenship WHERE person_id = t.person_id) AS citizenship_list FROM person t;</code>
Cela renvoie une seule ligne par personne, avec une chaîne de citoyenneté délimitée par des virgules dans la colonne citizenship_list
.
Résumé
WM_CONCAT
et LISTAGG
fournissent des moyens robustes et polyvalents d'agréger plusieurs lignes dans des listes séparées par des virgules dans Oracle. Ces fonctions rationalisent la manipulation des données et améliorent la clarté des requêtes SQL.
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!