Daten in einer SQL-Tabelle mithilfe von Case-Anweisungen transponieren
In SQL bezieht sich das Transponieren von Daten auf das Konvertieren eines Datensatzes, bei dem Zeilen und Spalten vertauscht werden. So transponieren Sie eine Tabelle mit einer ähnlichen Struktur wie der bereitgestellten:
Id | UserId | FieldName | FieldValue |
---|---|---|---|
1 | 100 | Username | John Doe |
2 | 100 | Password | pass123! |
3 | 102 | Username | Jane |
4 | 102 | Password | $ecret |
5 | 102 | Email Address | [email protected] |
in eine transponierte Form:
UserId | Username | Password | Email Address |
---|---|---|---|
100 | John Doe | pass123! | |
102 | Jane | $ecret | [email protected] |
Ein Ansatz besteht darin, mehrere CASE-Anweisungen zusammen mit Group-By-Klauseln zu verwenden:
SELECT t.userid MAX(CASE WHEN t.fieldname = 'Username' THEN t.fieldvalue ELSE NULL END) AS Username, MAX(CASE WHEN t.fieldname = 'Password' THEN t.fieldvalue ELSE NULL END) AS Password, MAX(CASE WHEN t.fieldname = 'Email Address' THEN t.fieldvalue ELSE NULL END) AS Email FROM TABLE t GROUP BY t.userid
Diese Abfrage berechnet den Maximalwert für jede Benutzer- und Feldkombination. Die CASE-Anweisungen definieren, welcher Feldwert basierend auf dem Wert des FieldName-Felds zurückgegeben werden soll.
Diese Methode erfordert jedoch die Definition von CASE-Anweisungen für jeden spezifischen Feldnamen. Erwägen Sie für eine dynamische Lösung die Verwendung der Prepared Statement-Syntax (dynamisches SQL) von MySQL zum Generieren der Abfrage.
Das obige ist der detaillierte Inhalt vonWie transponiere ich Daten in SQL mithilfe von CASE-Anweisungen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!