Maison >base de données >tutoriel mysql >Comment combiner plusieurs lignes dans une liste délimitée par des virgules dans Oracle ?

Comment combiner plusieurs lignes dans une liste délimitée par des virgules dans Oracle ?

Barbara Streisand
Barbara Streisandoriginal
2025-01-19 17:51:10851parcourir

How to Combine Multiple Rows into a Comma-Delimited List in 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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn