Eine Tabelle mit Daten, die Benutzereingaben für verschiedene Attribute darstellen, muss in eine Kreuztabelle umgewandelt werden Format, in dem jede Spaltenüberschrift ein Attribut darstellt und jede Zeile die entsprechenden Benutzereingabewerte für dieses Attribut enthält. Darüber hinaus sollte der Wert der Spalte „customer_attribute“ als Spaltenüberschrift anstelle statischer Beschriftungen verwendet werden.
Um das gewünschte Kreuztabellenformat zu erreichen, können Sie a verwenden PIVOT-Abfrage wie folgt:
SET @sql = NULL; SELECT GROUP_CONCAT(DISTINCT CONCAT( 'MAX(CASE node_id when ', node_id, ' then entered_value else NULL END) AS user_input', node_id ) ) INTO @sql FROM trn_user_log; SET @sql = CONCAT('SELECT app_id, transaction_id, mobile_no, ', @sql, ' FROM trn_user_log GROUP BY app_id, transaction_id, mobile_no'); PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt;
Diese Abfrage verwendet den PIVOT-Operator, um die Zeilen in Spalten umzuwandeln und nach zu gruppieren Spalten „app_id“, „transaction_id“ und „mobile_no“.
Um die Werte aus der Spalte „customer_attribute“ als Spaltenüberschriften zu verwenden, können Sie die obige Abfrage leicht ändern:
SET @sql = NULL; SELECT GROUP_CONCAT(DISTINCT CONCAT( 'MAX(CASE node_id when ', node_id, ' then entered_value else NULL END) AS ', customer_attribute ) ) INTO @sql FROM trn_user_log; SET @sql = CONCAT('SELECT app_id, transaction_id, mobile_no, ', @sql, ' FROM trn_user_log GROUP BY app_id, transaction_id, mobile_no'); PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt;
Diese überarbeitete Abfrage ersetzt die statischen Spaltenüberschriften (user_input1, user_input2 usw.) durch die entsprechenden customer_attribute-Werte.
Das obige ist der detaillierte Inhalt vonWie führe ich dynamische Kreuztabellenabfragen in MySQL mit PIVOT durch?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!