Jadual dengan data yang mewakili input pengguna untuk atribut yang berbeza diperlukan untuk diubah menjadi Crosstab format, di mana setiap pengepala lajur mewakili atribut dan setiap baris mengandungi nilai input pengguna yang sepadan untuk atribut tersebut. Selain itu, nilai lajur atribut_pelanggan hendaklah digunakan sebagai pengepala lajur dan bukannya label statik.
Untuk mencapai format Tab Silang yang diingini, anda boleh menggunakan Pertanyaan PIVOT seperti berikut:
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;
Pertanyaan ini menggunakan operator PIVOT untuk mengubah baris menjadi lajur, pengumpulan mengikut lajur app_id, transaction_id dan mobile_no.
Untuk menggunakan nilai daripada lajur atribut_pelanggan sebagai pengepala lajur, anda boleh mengubah suai pertanyaan di atas sedikit:
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;
Pertanyaan yang disemak ini menggantikan pengepala lajur statik (user_input1, user_input2, dsb.) dengan nilai atribut_pelanggan yang sepadan.
Atas ialah kandungan terperinci Bagaimana untuk Melaksanakan Pertanyaan Tab Silang Dinamik dalam MySQL Menggunakan PIVOT?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!