Maison >base de données >tutoriel mysql >Comment puis-je concaténer efficacement plusieurs lignes en une seule ligne dans Oracle SQL ?
Dans Oracle, concaténer efficacement plusieurs lignes en une seule est souvent une opération souhaitée. Cette question plonge dans un scénario spécifique où un tableau contient des données au format suivant :
question_id | element_id |
---|---|
1 | 7 |
1 | 8 |
2 | 9 |
3 | 10 |
3 | 11 |
3 | 12 |
L'objectif est de transformer ces données en le résultat souhaité suivant :
question_id | element_id |
---|---|
1 | 7,8 |
2 | 9 |
3 | 10,11,12 |
Pour accomplir Pour accomplir efficacement cette tâche sans recourir à des procédures stockées, Oracle 11gR2 a introduit la clause LISTAGG. Cette clause remarquable permet d'effectuer de telles opérations de concaténation directement au sein d'une seule instruction SQL.
Voici comment l'implémenter dans votre requête Oracle :
SELECT question_id, LISTAGG(element_id, ',') WITHIN GROUP (ORDER BY element_id) FROM YOUR_TABLE GROUP BY question_id;
La clause LISTAGG prend la forme suivante :
LISTAGG(expression, delimiter) WITHIN GROUP (ORDER BY expression)
Dans ce cas, nous précisons la colonne "element_id" comme expression et "," comme délimiteur pour séparer les valeurs concaténées. La clause WITHIN GROUP garantit que la concaténation est effectuée au sein de chaque groupe, qui est défini par la colonne "question_id".
Il convient de noter que la chaîne concaténée résultante peut dépasser la limite de longueur maximale pour un type de données VARCHAR2 ( 4000 caractères). Pour résoudre ce problème potentiel, Oracle 12cR2 a introduit l'option ON OVERFLOW TRUNCATE/ERROR. En incorporant cette option, vous pouvez spécifier s'il faut tronquer la chaîne ou générer une erreur si la limite de longueur est dépassée.
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!