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

Bagaimana untuk Menyahpivot Lajur secara Dinamik ke dalam Baris dalam MySQL?

Patricia Arquette
Lepaskan: 2024-12-08 06:24:10
asal
514 orang telah melayarinya

How to Dynamically Unpivot Columns into Rows in MySQL?

Memindahkan Lajur Dinamik ke Baris

Mengalih lajur ke dalam baris, yang sering dirujuk sebagai "menyahpivot," boleh menjadi teknik yang berharga dalam pembentukan semula data . Dengan menukar jadual lebar dengan berbilang lajur kepada jadual sempit dengan lajur yang lebih sedikit, ia menjadi lebih mudah untuk menganalisis dan bekerja dengan data.

Nyah Pivot Dinamik dalam MySQL

Dalam MySQL, tiada fungsi UNPIVOT terbina dalam. Walau bagaimanapun, anda boleh mencapai unpivoting menggunakan gabungan pernyataan SQL dan penjanaan SQL dinamik.

Contoh: Unpivoting Table_1

Pertimbangkan contoh berikut, di mana kita ingin menyahpivot Table_1 ke dalam Jadual_Keputusan_Dijangka, dengan mengambil kira hanya nilai yang lebih besar daripada 0:

Table1
-----------------------------------------
Id       abc  brt ccc ddq eee fff gga hxx
-----------------------------------------
12345     0    1   0   5   0   2   0   0  
21321     0    0   0   0   0   0   0   0   
33333     2    0   0   0   0   0   0   0   
41414     0    0   0   0   5   0   0   1   
55001     0    0   0   0   0   0   0   2   
60000     0    0   0   0   0   0   0   0 
77777     9    0   3   0   0   0   0   0
Salin selepas log masuk
Expected_Result_Table
---------------------
Id      Word   Qty>0
---------------------
12345    brt    1
12345    ddq    5
12345    fff    2
33333    abc    2
41414    eee    5
41414    hxx    1
55001    hxx    2
77777    abc    9
77777    ccc    3
Salin selepas log masuk

Penjanaan SQL Dinamik untuk NyahPivot

Untuk menyahpaut Jadual_1, kita perlu menjana pernyataan SQL dinamik berdasarkan nama lajur Jadual_1. Ini boleh dicapai menggunakan langkah berikut:

  1. Jana senarai nama lajur yang berbeza tidak termasuk lajur "Id" menggunakan pertanyaan berikut:

    SELECT
      GROUP_CONCAT(DISTINCT
        CONCAT(
          'select id, ''',
          c.column_name,
          ''' as word, ',
          c.column_name,
          ' as qty 
          from yt 
          where ',
          c.column_name,
          ' > 0'
        ) SEPARATOR ' UNION ALL '
      ) INTO @sql
    FROM information_schema.columns c
    where c.table_name = 'yt'
      and c.column_name not in ('id')
    order by c.ordinal_position;
    Salin selepas log masuk
  2. Sambungkan rentetan SQL yang dijana untuk membentuk SQL dinamik akhir pernyataan:

    SET @sql = CONCAT('select id, word, qty
                from
                (', @sql, ') x  order by id');
    Salin selepas log masuk
  3. Sediakan dan laksanakan pernyataan SQL dinamik menggunakan kod berikut:

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

Hasil:

Melaksanakan pernyataan SQL dinamik akan menjana Jadual_Keputusan_Dijangka:

---------------------
Id      Word   Qty>0
---------------------
12345    brt    1
12345    ddq    5
12345    fff    2
33333    abc    2
41414    eee    5
41414    hxx    1
55001    hxx    2
77777    abc    9
77777    ccc    3
Salin selepas log masuk

Atas ialah kandungan terperinci Bagaimana untuk Menyahpivot Lajur secara Dinamik ke dalam Baris 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