Rumah > pangkalan data > tutorial mysql > Bagaimana untuk Pivot Baris ke Lajur Dinamik dalam MySQL?

Bagaimana untuk Pivot Baris ke Lajur Dinamik dalam MySQL?

Mary-Kate Olsen
Lepaskan: 2025-01-25 13:07:08
asal
941 orang telah melayarinya

How to Pivot Rows into Dynamic Columns in MySQL?

MySQL: Tukar data garis ke lajur dinamik

Penerangan Masalah

Katakan kita mempunyai tiga jadual MySQL berikut:

    Jadual Produk (Produk):
  • <code>  id | name
       1 | 产品A
       2 | 产品B</code>
    Salin selepas log masuk
    Jadual rakan kongsi (rakan kongsi):
  • jualan (jualan):
    <code>  id | name
       1 | 合作伙伴A
       2 | 合作伙伴B</code>
    Salin selepas log masuk
  • Matlamatnya adalah untuk menukar data garis dalam jadual jualan ke dalam lajur dinamik, dan namanya mewakili produk yang berbeza. Hasil output yang dijangkakan adalah seperti berikut:

    <code>  partners_id | products_id
                1             2
                2             5
                1             5
                1             3
                1             4
                1             5
                2             2
                2             4
                2             3
                1             1</code>
    Salin selepas log masuk
  • Jawab
Malangnya, MySQL tidak mempunyai fungsi pivot khas. Walau bagaimanapun, kita boleh menggabungkan fungsi agregat dan pernyataan kes untuk mencapai hasil yang sama:

<code>partner_name | 产品A | 产品B | 产品C | 产品D | 产品E
合作伙伴A              1           1           1           1           2
合作伙伴B              0           1           1           1           1</code>
Salin selepas log masuk
penukaran lajur dinamik

Untuk mengendalikan produk yang tidak diketahui, kita perlu menggunakan lajur dinamik untuk penukaran. Ini perlu menggunakan maklumat dalam jadual produk untuk menyediakan pernyataan SQL:

<code class="language-sql">SELECT pt.partner_name,
  COUNT(CASE WHEN pd.product_name = '产品A' THEN 1 END) AS 产品A,
  COUNT(CASE WHEN pd.product_name = '产品B' THEN 1 END) AS 产品B,
  COUNT(CASE WHEN pd.product_name = '产品C' THEN 1 END) AS 产品C,
  COUNT(CASE WHEN pd.product_name = '产品D' THEN 1 END) AS 产品D,
  COUNT(CASE WHEN pd.product_name = '产品E' THEN 1 END) AS 产品E
FROM partners pt
LEFT JOIN sales s
  ON pt.part_id = s.partner_id
LEFT JOIN products pd
  ON s.product_id = pd.prod_id
GROUP BY pt.partner_name</code>
Salin selepas log masuk
Kaedah ini membolehkan untuk mengendalikan mana -mana lajur produk dan memastikan bahawa pertanyaan dapat menyesuaikan diri dengan perubahan dalam jadual produk tanpa mengubah suai pernyataan SQL itu sendiri.

Atas ialah kandungan terperinci Bagaimana untuk Pivot Baris ke Lajur Dinamik dalam MySQL?. 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