Rumah >pangkalan data >tutorial mysql >Bagaimana untuk PIVOT Jadual Secara Dinamik dan Mengekalkan Rekod Berbeza dengan Peratusan Sifar?
Pertanyaan PIVOT Dinamik untuk Rekod Berbeza
Masalah:
Pertimbangkan jadual berikut:
| Id | Code | percentage | name | name1 | activity | |---|---|---|---|---|---| | 1 | Prashant | 43.43 | James | James_ | Running | | 1 | Prashant | 70.43 | Sam | Sam_ | Cooking | | 1 | Prashant | 90.34 | Lisa | Lisa_ | Walking | | 1 | Prashant | 0.00 | James | James_ | Stealing | | 1 | Prashant | 0.00 | James | James_ | Lacking | | 1 | Prashant | 73 | Sam | Sam_ | Cooking 1 |
Menggunakan pertanyaan PIVOT standard, ia boleh mencabar untuk mengekalkan rekod yang berbeza dengan peratusan 0.00. Fungsi MAX sering mengabaikan baris ini, mengakibatkan hasil yang tidak lengkap.
Hasil Jangkaan:
| Id | Code | James | James_ | Sam | Sam_ | Lisa | Lisa_ | |---|---|---|---|---|---|---|---| | 1 | Prashant | Running | 43.43 | Cooking 1 | 73 | Walking | 90.34 | | 1 | Prashant | Stealing | 0.00 | Cooking | 3.43 | NULL | NULL | | 1 | Prashant | Lacking | 0.00 | NULL | NULL | NULL | NULL |
Penyelesaian:
Untuk menyelesaikan isu ini, kami boleh memperkenalkan fungsi ROW_NUMBER() ke dalam pertanyaan PIVOT. Fungsi ini memberikan nombor baris kepada rekod dalam setiap kumpulan nama, memastikan bahawa rekod dengan peratusan 0.00 pun disimpan.
;with cte as ( select *, ROW_NUMBER() over (partition by name order by percentage desc) ROWNUM from table_name ), cte2 as ( SELECT Id,Code,ROWNUM,James,James_,Sam,Sam_,Lisa,Lisa_ FROM cte PIVOT(MAX(activity) FOR name IN (James,Sam,Lisa)) AS PVTTable PIVOT ( MAX(percentage) FOR name1 IN (James_,Sam_,Lisa_)) AS PVTTable1 ) select Id, Code, MAX(James) James, MAX(James_) James_, MAX(Sam) Sam, MAX(Sam_) Sam_, MAX(Lisa) Lisa, MAX(Lisa_) Lisa_ from cte2 group by Id, Code, ROWNUM
Penjelasan:
Penting Nota:
Untuk menjadikan pertanyaan dinamik, kami boleh menggantikan nama berkod keras dan nilai name1 dengan pembolehubah dinamik yang boleh diisi pada masa jalan. Ini membolehkan pertanyaan mengendalikan jadual dengan bilangan lajur yang berbeza-beza.
Atas ialah kandungan terperinci Bagaimana untuk PIVOT Jadual Secara Dinamik dan Mengekalkan Rekod Berbeza dengan Peratusan Sifar?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!