Maison > base de données > tutoriel mysql > Comment concaténer plusieurs lignes en une seule ligne dans Oracle à l'aide de LISTAGG ?

Comment concaténer plusieurs lignes en une seule ligne dans Oracle à l'aide de LISTAGG ?

Barbara Streisand
Libérer: 2025-01-06 03:11:38
original
651 Les gens l'ont consulté

How to Concatenate Multiple Rows into a Single Row in Oracle Using LISTAGG?

Concaténation de plusieurs lignes en une seule dans Oracle

Pour concaténer plusieurs lignes en une seule dans Oracle sans utiliser de procédure stockée, Oracle les utilisateurs peuvent utiliser la clause LISTAGG. Cette clause permet une consolidation efficace des lignes en fonction d'un délimiteur spécifié.

Scénario de données :

Considérez les données suivantes :

question_id    element_id
1              7
1              8
2              9
3              10
3              11
3              12
Copier après la connexion

Sortie souhaitée :

Le résultat souhaité est de concaténer les valeurs element_id pour chaque question_id, résultant en :

question_id    element_id
1              7,8
2              9
3              10,11,12
Copier après la connexion

Solution avec LISTAGG :

À partir d'Oracle 11gR2, la clause LISTAGG peut être utilisée pour réaliser cette concaténation :

SELECT question_id,
       LISTAGG(element_id, ',') WITHIN GROUP (ORDER BY element_id)
FROM YOUR_TABLE
GROUP BY question_id;
Copier après la connexion

Cette requête utilise la fonction LISTAGG pour concaténer les valeurs element_id au sein de chaque groupe défini par le question_id. La clause ORDER BY garantit que les valeurs sont ordonnées dans chaque groupe avant la concaténation.

Gestion du débordement :

Notez que si la chaîne concaténée résultante dépasse la longueur maximale autorisée pour le type de données (par exemple, 4 000 caractères pour un VARCHAR2), les versions Oracle 12cR2 et ultérieures fournissent des options pour gérer overflow.

SELECT question_id,
       LISTAGG(element_id, ',') WITHIN GROUP (ORDER BY element_id) OVERFLOW TRUNCATE/ERROR
FROM YOUR_TABLE
GROUP BY question_id;
Copier après la connexion

Cette requête spécifie la clause ON OVERFLOW TRUNCATE/ERROR pour tronquer ou générer une erreur si le résultat dépasse la longueur maximale.

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!

source:php.cn
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