Concaténer et regrouper plusieurs lignes dans Oracle
Dans un scénario où vous avez une table avec plusieurs lignes nécessitant une concaténation et un regroupement, l'utilisation de la fonction LISTAGG dans Oracle 11g fournit une solution simple :
SELECT group_name, LISTAGG(name, ', ') WITHIN GROUP (ORDER BY GROUP) AS "names" FROM name_table GROUP BY group_name
La fonction LISTAGG agrège plusieurs valeurs à partir d'un groupe de lignes, en les séparant par un délimiteur spécifié (ici, ','). Il simplifie le processus de concaténation et de regroupement, produisant le résultat souhaité.
Pour les bases de données antérieures à Oracle 11g, une approche alternative utilisant l'analyse est disponible :
SELECT grp, ltrim(max(sys_connect_by_path(name, ',' )), ',') AS scbp FROM ( SELECT name, grp, row_number() OVER (PARTITION BY grp ORDER BY name) AS rn FROM tab ) START WITH rn = 1 CONNECT BY PRIOR rn = rn - 1 AND PRIOR grp = grp GROUP BY grp ORDER BY grp
Cette requête exploite le CONNECT BY clause et la fonction analytique row_number() pour concaténer et regrouper les valeurs de manière itérative, produisant le même résultat que la méthode 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!