Rumah > pangkalan data > tutorial mysql > Bagaimana untuk Mengubah Data Secara Dinamik dalam MySQL Menggunakan Penyata Disediakan?

Bagaimana untuk Mengubah Data Secara Dinamik dalam MySQL Menggunakan Penyata Disediakan?

Mary-Kate Olsen
Lepaskan: 2025-01-06 07:36:40
asal
604 orang telah melayarinya

How to Dynamically Pivot Data in MySQL Using Prepared Statements?

Pangsi Dinamik dalam MySQL Menggunakan Penyata Disediakan

MySQL tidak mempunyai fungsi PIVOT asli, tetapi anda boleh menirunya menggunakan fungsi agregat dan pernyataan CASE. Untuk data berputar secara dinamik, pernyataan yang disediakan menawarkan penyelesaian yang cekap.

Pertimbangkan senario dengan jadual bahagian produk:

CREATE TABLE Parts (
    part_id INT,
    part_type VARCHAR(1),
    product_id INT
);
INSERT INTO Parts (part_id, part_type, product_id) VALUES
(1, 'A', 1),
(2, 'B', 1),
(3, 'A', 2),
(4, 'B', 2),
(5, 'A', 3),
(6, 'B', 3);
Salin selepas log masuk

Output yang diingini ialah jadual terpangsi yang meringkaskan ID bahagian untuk setiap produk:

product_id  part_A_id  part_B_id
----------  ----------  ----------
1           1          2
2           3          4
3           5          6
Salin selepas log masuk

Dipangsi Dinamik Pertanyaan

SET @sql = NULL;
SELECT GROUP_CONCAT(DISTINCT
    CONCAT(
        'max(case when part_type = ''',
        part_type,
        ''' then part_id end) AS part_',
        part_type, '_id'
    )
) INTO @sql
FROM Parts;
SET @sql = CONCAT('SELECT product_id, ', @sql, ' 
                  FROM Parts 
                   GROUP BY product_id');

PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
Salin selepas log masuk

Pertanyaan Terpangsi Statik (Lajur Terhad)

Untuk pertanyaan statik dengan bilangan lajur pangsi yang tetap:

SELECT product_id,
    max(CASE WHEN part_type = 'A' THEN part_id END) AS part_A_id,
    max(CASE WHEN part_type = 'B' THEN part_id END) AS part_B_id
FROM Parts
GROUP BY product_id;
Salin selepas log masuk

Atas ialah kandungan terperinci Bagaimana untuk Mengubah Data Secara Dinamik dalam MySQL Menggunakan Penyata Disediakan?. 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