Maison  >  Article  >  base de données  >  Comment convertir plusieurs lignes en une seule dans Oracle

Comment convertir plusieurs lignes en une seule dans Oracle

WBOY
WBOYoriginal
2022-03-07 15:12:4622420parcourir

Dans Oracle, vous pouvez utiliser la fonction listagg avec la clause "order by" pour convertir plusieurs lignes en une seule ligne. Cette instruction peut trier les données, puis regrouper les résultats triés. La syntaxe est "listagg (nom de la colonne,'). séparateur ') au sein du groupe (ordre par nom de colonne)".

Comment convertir plusieurs lignes en une seule dans Oracle

L'environnement d'exploitation de ce tutoriel : système Windows 10, version Oracle 11g, ordinateur Dell G3.

Comment convertir plusieurs lignes en une seule ligne dans Oracle

En raison du besoin, les sous-organisations de l'organisation obtenue doivent être combinées en une seule ligne de données, et la propre fonction d'Oracle est utilisée

listagg (nom de la colonne , 'séparateur') au sein du groupe (ordre par nom de colonne)

C'est-à-dire qu'au sein de chaque groupe, LISTAGG trie les colonnes selon l'ordre par clause et assemble les résultats triés ensemble

Ma structure organisationnelle est une structure arborescente, et le SQL suivant consiste à interroger les noms de tous les sous-départements du département actuel.

SELECT LISTAGG(O.ORGNAME,',') WITHIN GROUP(ORDER BY LEVEL)
FROM ORGANIZATION O
START WITH O.ORGID = 1000 CONNECT BY PRIOR O.ORGID = O.PID AND LEVEL<4

Remarque : Le SQL ci-dessus utilise le mot-clé Oracle LEVEL, qui indique à quel niveau se trouvent les données dans la structure arborescente
Le SQL ci-dessus utilise également l'instruction de requête d'arborescence Oracle START WITH… CONNECT BY PRIOR…
Si les requêtes sont toutes les nœuds parents du nœud, alors le START WITH SQL ci-dessus doit être remplacé par :
START WITH O.ORGID = 1000 CONNECT BY PRIOR O.PID = O.ORGID (Les champs après PRIOR ne sont pas les mêmes que l'ordre précédent)

Les données de la table ORGANIZATION sont les suivantes

ORGID ORGNAME PID
1000 École primaire 0
1100 Première année 1000
1200 Second année 1000
1101 Classe 101 1100
1102 Classe 102 1100
1103 Classe 103 1100
1201 Classe 201 1200

1.LEVEL

SELECT ORGNAME,LEVEL FROM ORGANIZATION 
START WITH ORGID = 1000 CONNECT BY PRIOR O.ORGID = O.PID

Les résultats d'exécution sont les suivants

ORGNAME LEVEL
Elementary School 1
First Grade 2
Deuxième année 2
Classe 101 3
Classe 102 3
Classe 103 3
Classe 201 3

2. LISTAGG... AU SEIN DU GROUPE...

SELECT LISTAGG(O.ORGNAME,',') WITHIN GROUP(ORDER BY LEVEL)
FROM ORGANIZATION O

Les résultats de l'exécution sont les suivants :
École primaire, première année, deuxième année, classe 101, classe 102, classe 103, classe 201

3 Mettez tous les nœuds enfants sous le nœud parent sur une seule ligne

SELECT LISTAGG(O.ORGNAME,',') WITHIN GROUP(ORDER BY LEVEL)
FROM ORGANIZATION O
START WITH O.ORGID = 1000 CONNECT BY PRIOR O.ORGID = O.PID AND LEVEL<4

L'exécution. les résultats sont les suivants :
École primaire, première année, deuxième année, classe 101, classe 102, classe 103, classe 201

Tutoriel recommandé : "Tutoriel vidéo Oracle"

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