Ich habe eine Tabelle StudentMarks
mit SpaltenName, Maths, Science, English
. Daten sind wie
Name, Maths, Science, English
Tilak, 90, 40, 60
Raj, 30, 20, 10
Ich möchte es wie folgt arrangieren:
Name, Subject, Marks
Tilak, Maths, 90
Tilak, Science, 40
Tilak, English, 60
Mit Unpivot ich Name, Markierungen richtig , aber den Spaltennamen in der nicht auf die Subject
Spalte in der gewünschten Ergebnismenge übertragen.
Wie kann ich das erreichen?
Ich habe bisher die folgende Abfrage erreicht (um Name, Markierungen zu erhalten)
select Name, Marks from studentmarks
Unpivot
(
Marks for details in (Maths, Science, English)
) as UnPvt
Antworten:
Ihre Anfrage ist sehr nah. Sie sollten in der Lage sein, Folgendes zu verwenden, einschließlich der
subject
in der endgültigen Auswahlliste enthaltenen:Siehe SQL Fiddle mit Demo
quelle
Sie können auch versuchen, die Standard-SQL-Un-Pivoting-Methode zu verwenden, indem Sie eine logische Folge mit dem folgenden Code verwenden. Der folgende Code besteht aus 3 Schritten:
Entfernen Sie alle Nullkombinationen (falls vorhanden, kann der Tabellenausdruck vollständig vermieden werden, wenn die Basistabelle streng keine Nullwerte enthält.)
quelle
SELECT * FROM student
UNPIVOT (Noten für Fächer in (Mathematik, Naturwissenschaften, Englisch));
quelle
Eine andere Möglichkeit, Cross Join zu verwenden, besteht darin, Spaltennamen innerhalb von Cross Join anzugeben
quelle