Heim >Datenbank >MySQL-Tutorial >Wie kann ich SQL-Tabellendaten mit dynamisch generierten benutzerdefinierten Spaltennamen transponieren?
Transponieren von SQL-Tabellendaten mit benutzerdefinierten Feldnamen
Das Pivotieren oder Transponieren von Daten umfasst das Transformieren einer Tabelle, in der Spalten Attribute darstellen und Zeilen repräsentieren Entitätsdaten in einer Tabelle, in der Zeilen Attribute und Spalten Entitätsdaten darstellen. Dies ist oft nützlich, wenn Sie mit benutzerdefinierten Feldnamen arbeiten, wie in der bereitgestellten Beispieltabelle zu sehen ist.
Abfrage nach transponierter Tabelle
Um die angegebene Tabelle zu transponieren, müssen Sie kann wie gezeigt eine Kombination aus SQL-Funktionen und bedingten Anweisungen verwenden unten:
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 t GROUP BY t.UserId
Erklärung
Dynamische Abfrage mit vorbereiteten Anweisungen
Um eine dynamische Liste von Feldnamen zu verarbeiten, können Sie MySQLs Prepared Statement (dynamisches SQL) verwenden. Syntax:
SET @sql = 'SELECT UserId, '; SELECT GROUP_CONCAT(CONCAT('MAX(CASE WHEN FieldName = ''', FieldName, ''' THEN FieldValue ELSE NULL END) AS ', FieldName)) INTO @sql FROM (SELECT DISTINCT FieldName FROM t); SET @sql = CONCAT(@sql, ' FROM t GROUP BY UserId'); PREPARE stmt FROM @sql; EXECUTE stmt;
Diese Abfrage erstellt dynamisch eine SQL-Anweisung basierend auf den unterschiedlichen Feldnamen in der Tabelle und führt sie mithilfe einer vorbereiteten Anweisung aus.
Das obige ist der detaillierte Inhalt vonWie kann ich SQL-Tabellendaten mit dynamisch generierten benutzerdefinierten Spaltennamen transponieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!