Question :
Comment concaténer plusieurs valeurs dans une colonne spécifiée en une seule chaîne séparée par des virgules dans Oracle ? Les données d'entrée suivent un format spécifique et la sortie souhaitée doit regrouper et concaténer les valeurs pour chaque clé unique.
Réponse :
Pour Oracle 11g et supérieur :
Utilisez la fonction LISTAGG :
<code class="language-sql">SELECT col1, LISTAGG(col2, ', ') WITHIN GROUP (ORDER BY col2) "names" FROM table_x GROUP BY col1</code>
Pour Oracle 10g et inférieur :
Une solution consiste à créer une fonction personnalisée :
<code class="language-sql">CREATE OR REPLACE FUNCTION get_comma_separated_value (input_val IN NUMBER) RETURN VARCHAR2 IS return_text VARCHAR2(10000) := NULL; BEGIN FOR x IN (SELECT col2 FROM table_name WHERE col1 = input_val) LOOP return_text := return_text || ',' || x.col2 ; END LOOP; RETURN LTRIM(return_text, ','); END; /</code>
Comment utiliser :
<code class="language-sql">SELECT col1, get_comma_separated_value(col1) FROM table_name</code>
Remarque : Les versions Oracle antérieures à 11g ont une prise en charge limitée de la fonction WM_CONCAT, mais son utilisation est obsolète en raison de problèmes potentiels (voir la documentation Oracle pour plus de détails).
Dans MySQL (pour référence seulement) :
Fonction GROUP_CONCAT disponible :
<code class="language-sql">SELECT col1, GROUP_CONCAT(col2) FROM table_name GROUP BY col1</code>
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!