Heim > Datenbank > MySQL-Tutorial > Wie kann ich Daten mithilfe der Funktion „crosstab()' von SQL in mehreren Spalten positionieren?

Wie kann ich Daten mithilfe der Funktion „crosstab()' von SQL in mehreren Spalten positionieren?

Barbara Streisand
Freigeben: 2025-01-14 09:57:43
Original
686 Leute haben es durchsucht

How to Pivot Data on Multiple Columns using SQL's crosstab() Function?

Verwenden Sie Tablefunc, um einen mehrspaltigen Daten-Pivot zu implementieren

Die Funktion crosstab() in SQL wird häufig verwendet, um Daten im Langformat in Daten im Breitformat zu konvertieren. Es wird jedoch im Allgemeinen davon ausgegangen, dass die Spalten mit Ausnahme der Spalten „Zeilenname“ und „Wert“ für jede Zeile mit demselben Zeilennamen gleich sind. Diese Einschränkung kann bei der Arbeit mit Datensätzen mit variablen Zusatzspalten zu Herausforderungen führen.

Eine Möglichkeit, mit multivariaten Pivots umzugehen, besteht darin, eine temporäre Tabelle mit einer Zeilennamenspalte und allen erforderlichen zusätzlichen Spalten zu erstellen. Verwenden Sie dann die Funktion crosstab() zum Pivotieren der Daten, wobei Sie die Spalte mit dem Zeilennamen als primäre Gruppierungsspalte und die zusätzlichen Spalten als zusätzliche Gruppierungsspalten verwenden.

Betrachten Sie beispielsweise die folgenden Beispieldaten:

<code class="language-sql">CREATE TEMP TABLE t4 (
  timeof   timestamp
 ,entity    character
 ,status    integer
 ,ct        integer);

INSERT INTO t4 VALUES 
  ('2012-01-01', 'a', 1, 1)
 ,('2012-01-01', 'a', 0, 2)
 ,('2012-01-02', 'b', 1, 3)
 ,('2012-01-02', 'c', 0, 4);</code>
Nach dem Login kopieren

Um diese Daten mithilfe mehrerer Variablen zu schwenken, können Sie die folgende Abfrage verwenden:

<code class="language-sql">SELECT *
FROM   crosstab(
   'SELECT entity, timeof, status, ct
    FROM   t4
    ORDER  BY 1, 2, 3'
 ,$$VALUES (1), (0)$$)
 AS ct ("Attribute" character, "Section" timestamp, "status_1" int, "status_0" int);</code>
Nach dem Login kopieren

Diese Abfrage gruppiert die Daten nach den Spalten entity und timeof und wendet dann die Spalten status und ct als zusätzliche Spalten an. Die generierte Tabelle hat das folgende Format:

<code>Section | Attribute | status_1 | status_0
2012-01-01 00:00:00 | a         | 1         | 2
2012-01-02 00:00:00 | b         | 3         |
2012-01-02 00:00:00 | c         |           | 4</code>
Nach dem Login kopieren

Wie wir sehen können, werden die zusätzlichen Spalten Attribute jetzt als separate Spalten angezeigt, sodass wir die verschiedenen Messungen, die zu einem bestimmten Zeitpunkt an jeder Entität vorgenommen wurden, problemlos vergleichen können.

Zusammenfassend lässt sich sagen, dass die Verwendung der Funktion crosstab() mit einer temporären Tabelle eine benutzerdefinierte und effiziente Methode zur multivariaten Pivotierung bieten kann. Indem wir die Reihenfolge der Spalten steuern, können wir bestimmen, welche Spalten als Zeilennamen, zusätzliche Spalten, Kategoriespalten und Wertspalten gelten.

Das obige ist der detaillierte Inhalt vonWie kann ich Daten mithilfe der Funktion „crosstab()' von SQL in mehreren Spalten positionieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage