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!