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
Barbara Streisandoriginal
2025-01-06 03:11:38672parcourir

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

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

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;

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;

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!

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