Transponieren Sie Spalten in Zeilen in PostgreSQL
- Spalten in Zeilen transponieren
- Erstellen Sie eine Tabelle in PostgreSQL
-
Verwenden Sie die Funktion
crossstab()
, um Spalten in Zeilen in PostgreSQL zu transponieren -
Verwenden Sie die Funktion
unnest()
, um Spalten in Zeilen in PostgreSQL zu transponieren - Abschluss
Dieser Artikel wurde speziell formuliert, um eine Methode zu erörtern, die Spalten verwendet, die in der Eingabe bereitgestellt werden, um in Zeilen umgewandelt zu werden.
Es gibt mehrere Fälle, in denen Daten in einem anderen Format angezeigt werden müssen. Dieser Artikel beschreibt das Transformieren der Daten von regulären Spalten in Zeilen.
Um den gesamten Artikel zusammenzufassen, wurde das Problem, das eine Lösung erfordert, in einem Abschnitt besprochen. Dann wurden die beiden Methoden crossstab()
und unnest()
eingeführt, um das Problem zu lösen.
Abschließend werden Beispiele für jede Methode diskutiert, um einen besseren Einblick in beide Methoden zu geben.
Spalten in Zeilen transponieren
Das Problem, das in diesem Artikel diskutiert wird, ist das Transponieren von Spalten in Zeilen. Sie haben beispielsweise die folgende Tabelle:
Std_no. Name Degree
1 A W
2 B X
3 C Y
4 D Z
Dieser Artikel beschreibt, wie Sie die Spalten in der Tabelle in Zeilen konvertieren. Daher sollte die erwartete Lösung sein:
Std_no. 1 2 3 4
Name A B C D
Degree W X Y Z
Der Artikel erwähnt das Verfahren zum Konvertieren der Spalten in Zeilen. Die Eingabe kann in Form von Tabellenspalten oder Arrays erfolgen.
Auf beide Möglichkeiten wird im Artikel eingegangen.
Erstellen Sie eine Tabelle in PostgreSQL
Dieselbe Tabelle und dieselben Werte werden verwendet, um die Dinge im gesamten Artikel verständlicher zu machen. Dadurch wird der Fokus auf das Verständnis der Funktionen verlagert, anstatt Zeit mit den verschiedenen Schemas zu verbringen.
Die folgende Abfrage wird verwendet, um eine Tabelle zu definieren:
CREATE TABLE Student(Std_no int, StdName TEXT, StdDegree TEXT, CourseName TEXT);
Nach erfolgreicher Erstellung einer Tabelle werden acht Datensätze darin eingefügt. Die Aufzeichnungen sind wie folgt:
INSERT INTO Student(StdName, StdDegree, CourseName)
VALUES
('test1','att1','val1'),
('test1','att2','val2'),
('test1','att3','val3'),
('test1','att4','val4'),
('test2','att1','val5'),
('test2','att2','val6'),
('test2','att3','val7'),
('test2','att4','val8');
Sobald die Tabelle erstellt und Datensätze hinzugefügt wurden, kann die Anweisung SELECT
verwendet werden, um den aktuellen Zustand der Tabelle anzuzeigen.
Select * from Student;
Der Schnappschuss der Tabelle ist wie folgt:
Jetzt können wir uns der Definition und Verwendung der beiden Funktionen zuwenden, die helfen, Spalten in Zeilen in PostgreSQL zu transponieren.
Verwenden Sie die Funktion crossstab()
, um Spalten in Zeilen in PostgreSQL zu transponieren
Lassen Sie uns diskutieren, was die Funktion crossstab()
ist.
Diese Funktion wird von PostgreSQL Version 9.7 und höher unterstützt. Es kann auf verschiedene Weise mit unterschiedlichen Argumenten verwendet werden.
Die Syntax der Funktion crossstab()
ist wie folgt:
Kreuztabelle (SQL-Text)
KreuztabelleN(sql text)
Kreuztabelle (source_sql text, category_sql text)
Kreuztabelle (SQL-Text, N-Ganzzahl)
Die Funktionsweise und Beschreibung der einzelnen Argumente werden in der Dokumentation von PostgreSQL ausführlich erklärt.
Für diesen Artikel benötigen wir nur crosstab(sql text)
. Das Argument in crossstab(sql text)
ist eine SQL-Abfrage.
Wie die Funktion crossstab()
funktioniert
Dieser Abschnitt konzentriert sich auf die Funktionsweise der Funktion crossstab()
. Anhand eines Beispiels soll das Konzept der Funktion crossstab()
verstanden werden.
Hier ist eine Abfrage, die mit Hilfe der Funktion crossstab()
geschrieben wurde:
SELECT *
FROM crosstab(
'select StdName, StdDegree, CourseName
from Student
where StdDegree = 'att2'
or StdDegree = 'att3'
order by 1,2')
AS Student(row_name text, category_1 text, category_2 text, category_3 text);
Dies ist mit dem Konzept der verschachtelten Abfragen einfacher zu verstehen. Die Abfrage in Anführungszeichen ist die innere Abfrage, die auch als Argument für die Funktion crossstab()
dient; es wird zunächst ausgeführt.
Die Abfrage im Argument gibt Datensätze zurück, bei denen StdDegree
den Wert att2
oder att3
hat. Dies zeigt die Funktion crossstab()
mit den Überschriften row_name
, category_1
, category_2
und category_3
.
Das Ergebnis des Beispiels sieht wie folgt aus:
Verwenden Sie die Funktion unnest()
, um Spalten in Zeilen in PostgreSQL zu transponieren
Lassen Sie uns nun über die Funktion unnest()
sprechen. Die Funktion unnest()
ist eine Array-Funktion, die von Version 9.7 und höher des PostgreSQL-Servers unterstützt wird.
In PostgreSQL werden zahlreiche weitere Array-Funktionen angeboten, die in der Dokumentation des Servers erwähnt werden.
Die Syntax der Funktion unnest()
lautet wie folgt:
unnest(anyarray)
Die Funktion unnest()
nimmt ein Array oder eine Reihe von Arrays als Argument. Es erweitert das Array in separate Datensätze und zeigt dem Benutzer das Ergebnis an.
Die Funktion unnest()
unterstützt ein- und mehrdimensionale Arrays.
Wie die Funktion unnest()
funktioniert
Dieser Abschnitt konzentriert sich auf die Funktionsweise der Funktion unnest()
. Anhand eines Beispiels soll das Konzept der Funktion unnest()
verstanden werden.
Die Funktion unnest()
kann auf zwei verschiedene Arten verwendet werden. Beispiel 1 erwähnt die erste Möglichkeit, mit unnest()
Spalten in Zeilen zu transponieren.
SELECT unnest('{Std_no, StdName, StdDegree, CourseName}'::text[]) AS col
, unnest('{1,test1,att1,val1}'::text[]) AS row1
, unnest('{2,test1,att2,val2}'::text[]) AS row2
, unnest('{3,test1,att3,val3}'::text[]) AS row3
, unnest('{4,test1,att4,val4}'::text[]) AS row4;
Die Abfrage verwendet die Funktion unnest()
, die ein Array als Argument verwendet und separate Datensätze zurückgibt. Daher transponiert das Ergebnis der Abfrage Spalten in Zeilen:
Die in Beispiel 1 erwähnte Abfrage kann in einem etwas anderen Format geschrieben werden. Beide Beispiele haben ähnliche Abfragen, die die gleiche Aufgabe des Konvertierens von Spalten in Zeilen ausführen.
Hier ist ein anderes Format für die in Beispiel 1 erwähnte Abfrage:
SELECT * FROM unnest
(
'{Std_no, StdName, StdDegree, CourseName}'::text[]
,'{1,test1,att1,val1}'::text[]
,'{2,test1,att2,val2}'::text[]
,'{3,test1,att3,val3}'::text[]
,'{4,test1,att4,val4}'::text[]
)
AS t(col,row1,row2,row3,row4);
Der Unterschied zwischen den beiden Beispielen ist zu sehen. In der ersten in Beispiel 1 erwähnten Abfrage versorgte jede unnest()
-Funktion ein eindimensionales Array.
Jede unnest()
-Funktion hat in Beispiel 1 einen eigenen Header.
In diesem Beispiel wurde nur eine unnest()
-Funktion verwendet, die ein mehrdimensionales Array bedient. Die Überschriften für jede der neuen Spalten werden am Ende erwähnt.
Die Abfrage generiert das gleiche Ergebnis wie Beispiel 1:
Abschluss
Verschiedene Funktionen und SQL-Anweisungen können getestet werden, um Spalten in Zeilen zu transponieren. Beim Transponieren verwandelt sich jede Zeile in eine neue Spalte.
Dieses dynamische Ergebnis erschwert es einer einzelnen Abfrage, Spalten in Zeilen zu transponieren. Daher werden die Funktionen crossstab()
und unnest()
verwendet, um bei solchen Problemen zu helfen.
Hello, I am Bilal, a research enthusiast who tends to break and make code from scratch. I dwell deep into the latest issues faced by the developer community and provide answers and different solutions. Apart from that, I am just another normal developer with a laptop, a mug of coffee, some biscuits and a thick spectacle!
GitHub