Maison >base de données >tutoriel mysql >Existe-t-il un équivalent LISTAGG dans les anciennes versions d'Oracle au GROUP_CONCAT de MySQL ?

Existe-t-il un équivalent LISTAGG dans les anciennes versions d'Oracle au GROUP_CONCAT de MySQL ?

Patricia Arquette
Patricia Arquetteoriginal
2025-01-15 12:19:45126parcourir

Is There a LISTAGG Equivalent in Older Oracle Versions to MySQL's GROUP_CONCAT?

Existe-t-il un équivalent de GROUP_CONCAT pour MySQL dans Oracle ?

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn