Oracle SQL : fusionner plusieurs lignes de données en une seule ligne
Question :
Oracle SQL peut-il fusionner plusieurs lignes de données d'une table en une seule ligne ?
Instructions :
Supposons qu'il existe un tableau avec la structure suivante :
<code>A 1 A 2 B 1 B 2</code>
L'objectif est d'obtenir l'ensemble de résultats suivant :
<code>A 1 2 B 1 2</code>
Solution :
Selon la version d'Oracle SQL que vous utilisez, vous pouvez utiliser les méthodes suivantes :
1. Fonction wm_concat() (Oracle 12c et versions antérieures) :
<code class="language-sql">SELECT field1, wm_concat(field2) FROM YourTable GROUP BY field1;</code>
(Remarque : La fonction wm_concat() est obsolète dans Oracle 12c. Il est recommandé d'utiliser LISTAGG à la place.)
2. Agrégation de chaînes personnalisée :
Si la fonction wm_concat() n'est pas disponible, vous pouvez implémenter une méthode personnalisée pour effectuer une agrégation de chaînes. Veuillez visiter oracle-base.com pour des instructions détaillées.
3. Utilisez la fonction LISTAGG (Oracle 11gR2 et supérieur) :
Il s'agit de l'approche moderne recommandée car elle est plus robuste et prise en charge dans les versions Oracle les plus récentes.
<code class="language-sql">SELECT field1, LISTAGG(field2, ' ') WITHIN GROUP (ORDER BY field2) AS aggregated_field2 FROM YourTable GROUP BY field1;</code>
Cette requête utilise la fonction LISTAGG
pour concaténer les valeurs de field2
dans une chaîne, en utilisant des espaces comme délimiteurs et en triant par la valeur de field2
. La clause WITHIN GROUP (ORDER BY field2)
assure l'ordre des valeurs dans la chaîne résultante. La clause GROUP BY field1
est regroupée en fonction de la valeur de field1
, fusionnant ainsi plusieurs lignes en une seule.
Choisissez la solution la mieux adaptée à votre version d'Oracle. Pour Oracle 11gR2 et supérieur, il est fortement recommandé d'utiliser la fonction 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!