Heim > Datenbank > MySQL-Tutorial > Wie kann ich eine Tabelle drehen, ohne Aggregatfunktionen zu verwenden?

Wie kann ich eine Tabelle drehen, ohne Aggregatfunktionen zu verwenden?

Barbara Streisand
Freigeben: 2025-01-20 09:47:08
Original
418 Leute haben es durchsucht

How Can I Pivot a Table Without Using Aggregate Functions?

Pivot-Tabellen-Datenkonvertierung ohne Aggregatfunktionen

Im Bereich der Datenverarbeitung ist es manchmal notwendig, Daten in ein Format umzuwandeln, das benutzerfreundlicher oder für die Analyse geeigneter ist. Eine der gebräuchlichsten Techniken, um dies zu erreichen, ist das Pivotieren, bei dem Daten in ein breiteres Layout umgewandelt werden. Obwohl es sich bei der Pivotierung normalerweise um aggregierte Werte handelt, kann sie auch ohne Verwendung von Aggregatfunktionen durchgeführt werden.

Betrachten Sie die folgende Tabelle:

<code class="language-sql">CREATE TABLE Data (
  CustomerID int,
  DBColumnName varchar(50),
  Data varchar(50)
);

INSERT INTO Data (CustomerID, DBColumnName, Data)
VALUES
  (1, 'FirstName', 'Joe'),
  (1, 'MiddleName', 'S'),
  (1, 'LastName', 'Smith'),
  (1, 'Date', '12/12/2009'),
  (2, 'FirstName', 'Sam'),
  (2, 'MiddleName', 'S'),
  (2, 'LastName', 'Freddrick'),
  (2, 'Date', '1/12/2009'),
  (3, 'FirstName', 'Jaime'),
  (3, 'MiddleName', 'S'),
  (3, 'LastName', 'Carol'),
  (3, 'Date', '12/1/2009');</code>
Nach dem Login kopieren

Diese Tabelle enthält Daten für mehrere Kunden, wobei jeder Datensatz ein bestimmtes Attribut (Vorname, zweiter Vorname, Nachname, Datum) und den zugehörigen Wert darstellt. Das Ziel besteht darin, diese Daten in ein besser lesbares Format umzuwandeln:

<code class="language-sql">CREATE TABLE PivotedData (
  CustomerID int,
  FirstName varchar(50),
  MiddleName varchar(50),
  LastName varchar(50),
  Date varchar(50)
);

INSERT INTO PivotedData (CustomerID, FirstName, MiddleName, LastName, Date)
VALUES
  (1, 'Joe', 'S', 'Smith', '12/12/2009'),
  (2, 'Sam', 'S', 'Freddrick', '1/12/2009'),
  (3, 'Jaime', 'S', 'Carol', '12/1/2009');</code>
Nach dem Login kopieren

Es ist wichtig zu beachten, dass diese Transformation die Daten nicht aggregiert. Stattdessen wird für jedes Attribut für jeden Kunden ein eindeutiger Wert beibehalten.

Um diese Transformation ohne die Verwendung von Aggregatfunktionen zu erreichen, können wir einen CASE-Ausdruck in einer gruppierten SELECT-Anweisung verwenden:

<code class="language-sql">SELECT
  CustomerID,
  MIN(CASE DBColumnName WHEN 'FirstName' THEN Data END) AS FirstName,
  MIN(CASE DBColumnName WHEN 'MiddleName' THEN Data END) AS MiddleName,
  MIN(CASE DBColumnName WHEN 'LastName' THEN Data END) AS LastName,
  MIN(CASE DBColumnName WHEN 'Date' THEN Data END) AS Date
FROM Data
GROUP BY CustomerID;</code>
Nach dem Login kopieren

Diese Abfrage verwendet eine Reihe von CASE-Ausdrücken, um den jedem Attribut zugeordneten Wert für jeden Kunden bedingt auszuwählen. Die Funktion MIN() wird verwendet, um einen einzelnen Wert abzurufen, der eine bestimmte Bedingung erfüllt, wodurch sichergestellt wird, dass wir nur einen Wert pro Attribut enthalten. Indem wir die Ergebnisse nach Kunden-ID gruppieren, erstellen wir für jeden Kunden eine Zeile mit den entsprechenden Attributen und Werten.

Diese Technik ermöglicht eine flexible Pivotierung von Daten ohne den Einsatz von Aggregatfunktionen. Dies ist besonders nützlich, wenn die Daten nur eine minimale Transformation erfordern und die ursprünglichen Werte erhalten bleiben müssen.

Das obige ist der detaillierte Inhalt vonWie kann ich eine Tabelle drehen, ohne Aggregatfunktionen zu verwenden?. 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