需要將包含代表不同屬性的使用者輸入的資料的表格轉換為交叉表格式,其中每個列標題代表一個屬性,每行包含該屬性對應的使用者輸入值。此外,customer_attribute 欄位的值會套用作列標題,而不是靜態標籤。
要實現所需的交叉表格式,您可以使用PIVOT 查詢如下:
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;
此查詢使用PIVOT 運算子將行轉換為列,並按app_id、transaction_id 和mobile_no 列。
要使用customer_attribute 列中的值作為列標題,您可以稍微修改上面的查詢:
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;
此修改後的查詢將靜態列標題(user_input1、user_input2 等)替換為對應的列標題customer_attribute 值。
以上是如何使用 PIVOT 在 MySQL 中執行動態交叉表查詢?的詳細內容。更多資訊請關注PHP中文網其他相關文章!