Heim >Datenbank >MySQL-Tutorial >Wie kann ich SQL-Tabellendaten mit dynamisch generierten benutzerdefinierten Spaltennamen transponieren?

Wie kann ich SQL-Tabellendaten mit dynamisch generierten benutzerdefinierten Spaltennamen transponieren?

DDD
DDDOriginal
2025-01-05 21:40:41625Durchsuche

How Can I Transpose SQL Table Data with Dynamically Generated User-Defined Column Names?

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

  • Die MAX-Funktion gibt den Maximalwert für jede Spalte zurück, der dem Feldwert für den spezifischen Feldnamen entspricht.
  • Die CASE-Anweisung wertet die FieldName-Spalte aus und gibt den entsprechenden FieldValue für jeden Feldnamen zurück, der im WHERE erscheint Klausel.
  • Die GROUP BY-Klausel gruppiert die Ergebnisse nach Benutzer-ID und stellt sicher, dass die Daten jedes Benutzers in einer separaten Zeile platziert werden.

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!

Stellungnahme:
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