Maison  >  Article  >  base de données  >  Comment convertir une table horizontale Oracle en table verticale

Comment convertir une table horizontale Oracle en table verticale

WBOY
WBOYoriginal
2022-05-24 15:23:065914parcourir

Dans Oracle, vous pouvez utiliser la fonction pivot() pour convertir un tableau horizontal en tableau vertical. Cette fonction est utilisée pour convertir des lignes en colonnes. La syntaxe est "SELECT * FROM (ensemble de requêtes de données) PIVOT (SUM (ligne). à la colonne) La valeur de)POUR la colonne qui doit être ligne à colonne IN (la valeur de la colonne convertie))".

Comment convertir une table horizontale Oracle en table verticale

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

Comment convertir une table horizontale Oracle en table verticale

La conversion de ligne en colonne Oracle consiste à utiliser la valeur d'un certain champ comme valeur unique, puis à convertir la valeur de ligne d'un autre champ en sa valeur de colonne. Ici, nous utilisons toujours le tableau des scores des élèves de notre système comme exemple. Les enregistrements du tableau des scores (lignes) correspondent aux scores de chaque élève dans chaque matière. Ensuite, nous devons créer un rapport qui affiche toutes les matières de chaque élève comme une seule. colonne d’informations sur les performances. Les données du cas sont les suivantes :

Comment convertir une table horizontale Oracle en table verticale

Alors comment y parvenir ? Voici plusieurs méthodes une par une :

1. Tout d'abord, il faut penser qu'il devrait être possible d'utiliser le regroupement Oracle (group by). Le code d'implémentation est le suivant :

select c.stuname,
       --利用分组聚合函数
       sum(decode(b.coursename, '英语(2018上学期)', t.score, 0)) as "英语(2018上学期)",
       sum(decode(b.coursename, '数学(2018上学期)', t.score, 0)) as "英语(2018上学期)",
       sum(decode(b.coursename, '语文(2018上学期)', t.score, 0)) as "英语(2018上学期)"
  from STUDENT.SCORE t, student.course b, student.stuinfo c
 where t.courseid = b.courseid
   and t.stuid = c.stuid
 group by c.stuname

Nous utilisons group by pour regrouper les étudiants. , puis utilisez le décodage pour regrouper les étudiants. Convertissez la valeur de la note du cours correspondant, puis résumez-la pour obtenir la valeur du résultat de la note :

Comment convertir une table horizontale Oracle en table verticale

2. -dans la fonction PIVOT, qui peut parfaitement résoudre cette exigence de ligne à colonne, la structure syntaxique spécifique est la suivante :

SELECT * FROM (数据查询集)
PIVOT 
(
 SUM(Score/*行转列后 列的值*/) FOR 
 coursename/*需要行转列的列*/ IN (转换后列的值)
)

Le code spécifique est le suivant :

select * from  (select c.stuname,
       b.coursename,
       t.score
  from STUDENT.SCORE t, student.course b, student.stuinfo c
 where t.courseid = b.courseid
   and t.stuid = c.stuid )  /*数据源*/
PIVOT 
(
 SUM(score/*行转列后 列的值*/) 
 FOR coursename/*需要行转列的列*/ IN ('英语(2018上学期)' as 英语,'数学(2018上学期)' as 数学,'语文(2018上学期)' as 语文 )
) ;

Les résultats sont les suivants :

Comment convertir une table horizontale Oracle en table verticale

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