In Oracle können Sie die Funktion „pivot()“ verwenden, um eine horizontale Tabelle in eine vertikale Tabelle umzuwandeln. Die Syntax lautet „SELECT * FROM (Datenabfragesatz) PIVOT (SUM (Zeile). in Spalte) Der Wert von)FOR muss in Zeilen und Spalten IN (der Wert der konvertierten Spalte))“ konvertiert werden.
Die Betriebsumgebung dieses Tutorials: Windows 10-System, Oracle 11g-Version, Dell G3-Computer.
Bei der Konvertierung von Zeilen in Spalten von Oracle wird der Wert eines bestimmten Felds als eindeutiger Wert verwendet und dann der Zeilenwert eines anderen Felds in seinen Spaltenwert umgewandelt. Hier verwenden wir immer noch die Bewertungstabelle der Schüler unseres Systems als Beispiel. Die Datensätze (Zeilen) der Bewertungstabelle entsprechen den Bewertungen jedes Schülers in jedem Fach. Anschließend müssen wir einen Bericht erstellen, der alle Fächer jedes Schülers als Ganzes anzeigt Spalte. Leistungsinformationen. Die Falldaten lauten wie folgt:
Wie erreichen wir das? Hier sind mehrere Methoden nacheinander:
1. Zunächst müssen wir darüber nachdenken, dass es möglich sein sollte, die Oracle-Gruppierung (Gruppierung nach) zu verwenden:
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
Wir verwenden Group by, um Schüler zu gruppieren , und verwenden Sie dann die Dekodierung, um den Notenwert des entsprechenden Kurses zu gruppieren, und summieren Sie ihn dann, um den Ergebniswert der Note zu erhalten:
2 -in-Funktion PIVOT, die diese Zeile-zu-Spalte-Anforderung perfekt lösen kann, die spezifische Syntaxstruktur ist wie folgt:
SELECT * FROM (数据查询集) PIVOT ( SUM(Score/*行转列后 列的值*/) FOR coursename/*需要行转列的列*/ IN (转换后列的值) )
Der spezifische Code lautet wie folgt:
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 语文 ) ) ;
Die Ergebnisse sind wie folgt:
Empfohlenes Tutorial : „Oracle-Video-Tutorial“
Das obige ist der detaillierte Inhalt vonSo konvertieren Sie eine horizontale Oracle-Tabelle in eine vertikale Tabelle. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!