Maison > base de données > tutoriel mysql > Oracle SQL peut-il regrouper plusieurs lignes en une seule ?

Oracle SQL peut-il regrouper plusieurs lignes en une seule ?

Patricia Arquette
Libérer: 2025-01-15 18:47:47
original
886 Les gens l'ont consulté

Can Oracle SQL Aggregate Multiple Rows into a Single Row?

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>
Copier après la connexion

L'objectif est d'obtenir l'ensemble de résultats suivant :

<code>A 1 2
B 1 2</code>
Copier après la connexion

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>
Copier après la connexion

(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>
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal