Oracle Database/Utilisation de fonctions/fonction LISTAGG
La méthode LISTAGG permet de concaténer les valeurs d'une colonne, en gérant la séparation (typiquement, avec des "," qui est le choix par défaut). Cette fonction est disponible depuis la version Oracle 11g
Illustration
modifierLa requête suivante illustre l'utilisation de cette fonction.
with GROUPE as (
select 'Claire' as PRENOM, 'F' as SEXE, 25 as AGE from DUAL union --Pour la 1re ligne, on précise les noms des colonnes
select 'Jean-Sebastien', 'M', 32 from DUAL union --Pour les lignes, on ne le refait pas
select 'Marie', 'F', 23 from DUAL union
select 'Kevin', 'M', 19 from DUAL union
select 'Natacha', 'F', 31 from DUAL
)
/* 1 */ select * from GROUPE;
/* 2 */ select listAgg(PRENOM, ', ') within group (order by PRENOM) "Membres féminins du groupe" from GROUPE where SEXE = 'F'
/* 3 */ select listAgg(PRENOM, ', ') within group (order by AGE desc) "Membres trentenaires du groupe" from GROUPE where AGE > 30
;
Résultat du 1er select (« select * from GROUPE »)
modifierPRENOM | SEXE | AGE |
---|---|---|
Claire | F | 25 |
Jean-Sebastien | M | 32 |
Kevin | M | 19 |
Marie | F | 23 |
Natacha | F | 31 |
Résultat du 2e select
modifierMembres féminins du groupe |
---|
Claire, Marie, Natacha |
Résultat du 3e select
modifierMembres trentenaires du groupe |
---|
Jean-Sebastien, Natacha |
Cas pratique d'utilisation
modifierLa requête suivante permet de lister les colonnes de type 'NUMBER' d'une table 'MA_TABLE', en concaténant les noms.
select listAgg(COLUMN_NAME, ', ') within group (order by COLUMN_NAME) "numberTypeColumns"
from USER_TAB_COLUMNS
where TABLE_NAME = 'MA_TABLE' and DATA_TYPE like 'NUMBER%';
Cette requête peut s'avérer utile pour utiliser la fonction UNPIVOT.