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>
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>
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>
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!