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
Libérer: 2025-01-19 17:51:10
original
921 Les gens l'ont consulté

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 :

SELECT WM_CONCAT(table_name)
FROM user_tables;
Copier après la connexion

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 :

SELECT LISTAGG(table_name, ', ') WITHIN GROUP (ORDER BY table_name)
FROM user_tables;
Copier après la connexion

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 :

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;
Copier après la connexion

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 de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal