Transponieren Sie Spalten in Zeilen in PostgreSQL

Bilal Shahid 20 Juni 2023
  1. Spalten in Zeilen transponieren
  2. Erstellen Sie eine Tabelle in PostgreSQL
  3. Verwenden Sie die Funktion crossstab(), um Spalten in Zeilen in PostgreSQL zu transponieren
  4. Verwenden Sie die Funktion unnest(), um Spalten in Zeilen in PostgreSQL zu transponieren
  5. Abschluss
Transponieren Sie Spalten in Zeilen in PostgreSQL

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:

Schülertisch

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:

  1. Kreuztabelle (SQL-Text)
  2. KreuztabelleN(sql text)
  3. Kreuztabelle (source_sql text, category_sql text)
  4. 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:

Beispiel mit Kreuztabellenfunktion

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:

Verwenden der Unnest-Funktion

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:

Verwenden der Unnest-Funktion

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.

Bilal Shahid avatar Bilal Shahid avatar

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

Verwandter Artikel - PostgreSQL Column