Maison >base de données >tutoriel mysql >Comment puis-je concaténer plusieurs lignes en une seule ligne dans Oracle sans utiliser de procédure stockée ?
Concaténation de plusieurs lignes en une seule ligne dans Oracle sans procédure stockée
Lorsque vous travaillez avec des données dans Oracle, il peut y avoir des cas où vous besoin de combiner plusieurs lignes en une seule ligne. Traditionnellement, cela pouvait être réalisé à l’aide d’une procédure stockée. Cependant, il existe une solution plus efficace et plus simple utilisant la clause LISTAGG d'Oracle.
La clause LISTAGG dans Oracle
Introduite dans Oracle 11gR2, la clause LISTAGG vous permet de concaténer plusieurs valeurs dans une seule chaîne. Il prend la syntaxe suivante :
LISTAGG(expression, delimiter) WITHIN GROUP (ORDER BY column)
Exemple
Considérez l'ensemble de données suivant :
question_id | element_id |
---|---|
1 | 7 |
1 | 8 |
2 | 9 |
3 | 10 |
3 | 11 |
3 | 12 |
Pour concaténer les valeurs element_id pour chaque question_id sur une seule ligne, nous pouvons utiliser la requête suivante :
SELECT question_id, LISTAGG(element_id, ',') WITHIN GROUP (ORDER BY element_id) FROM your_table GROUP BY question_id;
Sortie
question_id | element_id |
---|---|
1 | 7,8 |
2 | 9 |
3 | 10,11,12 |
Considérations relatives aux grandes chaînes de résultats
Si la chaîne résultante devrait dépasser 4 000 caractères (la longueur maximale pour un type de données VARCHAR2), vous pouvez utiliser ce qui suit amélioration introduite dans Oracle 12cR2 :
SELECT question_id, LISTAGG(element_id, ',') WITHIN GROUP (ORDER BY element_id) ON OVERFLOW TRUNCATE/ERROR FROM your_table GROUP BY question_id;
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!