Rumah > pangkalan data > tutorial mysql > Bagaimanakah Saya Boleh Melakukan Pertanyaan PIVOT pada Rekod Terbeza Semasa Memelihara Persatuan dan Mengendalikan Nilai Sifar?

Bagaimanakah Saya Boleh Melakukan Pertanyaan PIVOT pada Rekod Terbeza Semasa Memelihara Persatuan dan Mengendalikan Nilai Sifar?

Barbara Streisand
Lepaskan: 2024-12-24 06:49:14
asal
429 orang telah melayarinya

How Can I Perform a PIVOT Query on Distinct Records While Preserving Associations and Handling Zero Values?

Pertanyaan PIVOT pada Rekod Cemerlang dengan Persatuan Tertahan

Pertimbangkan senario di mana kami mempunyai jadual dengan data yang mengandungi aktiviti dan peratusan untuk individu. Pertanyaan PIVOT standard menggunakan fungsi MAX mungkin mengabaikan aktiviti dengan nilai peratusan sifar. Untuk menangani isu ini, kami memperkenalkan penyelesaian yang mengekalkan perhubungan antara aktiviti dan peratusan.

Untuk mencapai matlamat ini, kami menggabungkan fungsi ROW_NUMBER() ke dalam ungkapan jadual biasa (CTE) untuk menyusun aktiviti secara berurutan dalam setiap kumpulan nama. Dengan teknik ini, pertanyaan PIVOT boleh mengekalkan perkaitan antara aktiviti dan peratusan merentas berbilang baris.

Berikut ialah contoh pertanyaan yang disemak:

;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
Salin selepas log masuk

CTE, cte, menambah ROWNUM lajur ke jadual awal, menyusun aktiviti untuk setiap nama dalam susunan peratusan menurun. Susunan ini membenarkan pertanyaan PIVOT seterusnya untuk mengumpulkan dan mengagregat data dengan betul.

Output pertanyaan akan menyerupai hasil yang dijangkakan, dengan aktiviti yang berbeza dikaitkan dengan nama dan peratusan masing-masing:

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
Salin selepas log masuk

Menggunakan teknik ini, kami boleh memperoleh hasil PIVOT yang lengkap dan tepat sambil mengekalkan perkaitan antara aktiviti dan peratusan, walaupun untuk rekod dengan sifar nilai peratusan.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Melakukan Pertanyaan PIVOT pada Rekod Terbeza Semasa Memelihara Persatuan dan Mengendalikan Nilai Sifar?. 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