需要将包含代表不同属性的用户输入的数据的表转换为交叉表格式,其中每个列标题代表一个属性,每行包含该属性对应的用户输入值。此外,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中文网其他相关文章!