Concaténation et regroupement de plusieurs lignes dans Oracle
Dans Oracle, la tâche de concaténation d'enregistrements en fonction d'une condition de regroupement peut être difficile. Considérons un tableau comme celui-ci :
NAME GROUP_NAME name1 groupA name2 groupB name5 groupC name4 groupA name3 groupC
Pour obtenir le résultat souhaité en regroupant et en concaténant la colonne « NAME » en fonction de « GROUP_NAME », vous pouvez exploiter la fonction LISTAGG dans Oracle 11g ou version ultérieure :
SELECT group_name, LISTAGG(name, ', ') WITHIN GROUP (ORDER BY GROUP) "names" FROM name_table GROUP BY group_name
Cependant, si vous travaillez avec une version d'Oracle qui ne prend pas en charge LISTAGG, il existe des méthodes alternatives. Une approche utilise des fonctions analytiques :
select grp, ltrim(max(sys_connect_by_path (name, ',' )), ',') scbp from (select name, grp, row_number() over (partition by grp order by name) rn from tab ) start with rn = 1 connect by prior rn = rn-1 and prior grp = grp group by grp order by grp
En combinant ces techniques, vous pouvez concaténer et regrouper efficacement plusieurs lignes dans Oracle, même en l'absence de LISTAGG.
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!