Maison  >  Article  >  base de données  >  Comment réaliser une conversion ligne-colonne dans Oracle

Comment réaliser une conversion ligne-colonne dans Oracle

青灯夜游
青灯夜游original
2022-01-25 17:23:1148469parcourir

Méthodes pour implémenter la conversion ligne-colonne : 1. Utilisez la fonction PIVOT() pour implémenter la conversion ligne-colonne, avec la syntaxe "SELECT * FROM (ensemble de données) PIVOT (SUM(Score) FOR coursename IN (colonne convertie value))"; 2. Utilisez la fonction unpivot() pour réaliser la commutation de colonnes.

Comment réaliser une conversion ligne-colonne dans Oracle

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

Ligne Oracle en colonne

La ligne Oracle en colonne consiste à convertir la valeur d'un certain champ en 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 réaliser une conversion ligne-colonne dans Oracle

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 réaliser une conversion ligne-colonne dans Oracle

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 语文 )
) ;

Le résultat est le suivant :

Comment réaliser une conversion ligne-colonne dans Oracle

Conversion de ligne de colonne Oracle

La conversion de ligne de colonne Oracle consiste à modifier les champs des colonnes d'une ligne en fonction de la valeur unique de la ligne Convertir en plusieurs lignes de données. Par exemple, les données de base du tableau des performances des élèves dans la conversion de ligne en colonne Oracle ci-dessus sont que les performances d'un élève dans une matière correspondent à un enregistrement. Ensuite, nous avons converti les lignes en colonnes et les avons transformés en un enregistrement correspondant au score d'un élève dans chaque colonne (mathématiques, anglais, chinois). Cet article consiste donc à convertir à nouveau le tableau de scores des étudiants précédemment converti (table de sauvegarde score_copy) en colonnes et en lignes et à le convertir en données originales. Les données du cas sont les suivantes :

Comment réaliser une conversion ligne-colonne dans Oracle

Comment réaliser une conversion ligne-colonne dans Oracle

Alors, comment implémenter le changement de colonne ? Deux méthodes courantes sont présentées ci-dessous :

1. Utilisez union all pour l'épissage, qui peut parfaitement convertir les colonnes correspondantes en enregistrements de ligne. Le code spécifique est le suivant :

select t.stuname, '英语' as coursename ,t.英语 as score  from SCORE_COPY t
union all
select t.stuname, '数学' as coursename ,t.数学 as score  from SCORE_COPY t
union all
select t.stuname, '语文' as coursename ,t.语文 as score  from SCORE_COPY t

Les résultats sont les suivants :

Comment réaliser une conversion ligne-colonne dans Oracle

2. .Utilisez Oracle pour automatiquement La fonction non-pivot de colonne à ligne peut également parfaitement résoudre ce problème. La structure syntaxique spécifique est la suivante :

select 字段 from 数据集
unpivot(自定义列名/*列的值*/ for 自定义列名 in(列名))

Le code d'implémentation est le suivant :

select stuname, coursename ,score from
score_copy  t
unpivot
(score for coursename in (英语,数学,语文))

Les résultats sont les suivants :

Comment réaliser une conversion ligne-colonne dans Oracle

Tutoriel recommandé : "Tutoriel 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