Rumah > pangkalan data > tutorial mysql > Bagaimana untuk Melaksanakan Pertanyaan Tab Silang Dinamik dalam MySQL Menggunakan PIVOT?

Bagaimana untuk Melaksanakan Pertanyaan Tab Silang Dinamik dalam MySQL Menggunakan PIVOT?

Susan Sarandon
Lepaskan: 2025-01-06 09:30:41
asal
652 orang telah melayarinya

How to Perform Dynamic Crosstab Queries in MySQL Using PIVOT?

MySQL PIVOT/CROSSTAB Query

Pernyataan Masalah:

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.

Pertanyaan 1: Mengubah Data kepada Format Tab Silang

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;
Salin selepas log masuk

Pertanyaan ini menggunakan operator PIVOT untuk mengubah baris menjadi lajur, pengumpulan mengikut lajur app_id, transaction_id dan mobile_no.

Pertanyaan 2: Menggunakan Pengepala Lajur Tersuai

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;
Salin selepas log masuk

Pertanyaan yang disemak ini menggantikan pengepala lajur statik (user_input1, user_input2, dsb.) dengan nilai atribut_pelanggan yang sepadan.

Nota:

  • Pernyataan yang disediakan digunakan dalam pertanyaan ini memastikan penciptaan lajur dinamik dan mengelakkan kemungkinan ralat sintaks semasa mengendalikan bilangan lajur tidak diketahui.
  • Fungsi NAME_CONST yang digunakan dalam pertanyaan awal anda bukan terpakai dalam kes ini, kerana ia memerlukan nilai malar sebagai hujah kedua, yang tidak boleh dilaksanakan untuk penjanaan lajur dinamik.

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!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan