Pertanyaan PIVOT Dinamik untuk Memelihara Rekod Yang Berbeza
Masalah:
Pertanyaan PIVOT sering menggunakan MAX () pengagregatan untuk meringkaskan data, yang boleh mengakibatkan kehilangan nilai yang berbeza. Sebagai contoh, dalam jadual dengan berbilang rekod aktiviti untuk nama yang sama, PIVOT mungkin mengabaikan rekod dengan nilai MAX() yang lebih rendah.
Objektif:
Buat PIVOT dinamik pertanyaan yang mengekalkan rekod yang berbeza dan peratusan yang sepadan nilai.
Penyelesaian:
;with cte as ( select *, ROW_NUMBER() over (partition by name order by percentage desc) ROWNUM from A ), 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
Penjanaan Pertanyaan Dinamik:
Untuk penjanaan pertanyaan dinamik, gantikan senarai yang dipisahkan koma daripada nama (@name_concat, @name1_concat) dan SELECT MAX() agregasi (@select_aggs) dengan pembolehubah yang boleh diisi pada masa jalan.
Contoh Hasil:
Pertanyaan mengembalikan output yang diingini, mengekalkan baris nama yang berbeza dan peratusannya:
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
Atas ialah kandungan terperinci Bagaimana untuk Mencipta Pertanyaan PIVOT Dinamik yang Memelihara Rekod Berbeza?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!