Rumah > pangkalan data > tutorial mysql > Bagaimana untuk Mengelakkan Kehilangan Data Apabila Menggunakan Pertanyaan PIVOT pada Rekod Berbeza dengan Nilai Sifar?

Bagaimana untuk Mengelakkan Kehilangan Data Apabila Menggunakan Pertanyaan PIVOT pada Rekod Berbeza dengan Nilai Sifar?

DDD
Lepaskan: 2025-01-05 20:20:41
asal
962 orang telah melayarinya

How to Avoid Data Loss When Using PIVOT Queries on Distinct Records with Zero Values?

Mengelakkan Kehilangan Data dalam Pertanyaan PIVOT untuk Rekod Berbeza

Masalah:
Pertanyaan PIVOT berguna untuk penstrukturan semula data untuk memaparkan maklumat dengan lebih teratur. Walau bagaimanapun, apabila berurusan dengan rekod yang berbeza, fungsi pengagregatan MAX boleh menyebabkan nilai sifar ditinggalkan, yang membawa kepada data yang tidak lengkap.

Penyelesaian:
Untuk mengekalkan semua rekod yang berbeza, walaupun rekod tersebut dengan nilai sifar, seseorang boleh memasukkan fungsi ROW_NUMBER() ke dalam pertanyaan PIVOT. Pendekatan ini memberikan nombor baris pada setiap rekod, mengekalkan perkaitan antara aktiviti dan peratusan.

;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

Contoh:

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

Sebelum ini, pertanyaan PIVOT standard akan menghasilkan perkara berikut hasil:

Id Code James James_ Sam Sam_ Lisa Lisa_
1 Prashant Running 43.43 Cooking 1 73 Walking 90.34
1 Prashant Stealing 0.0 Cooking 3.43 NULL NULL
1 Prashant NULL NULL NULL NULL NULL NULL

Walau bagaimanapun, dengan menggabungkan fungsi ROW_NUMBER(), pertanyaan yang diubah suai mengekalkan semua rekod yang berbeza:

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

Pendekatan ini memastikan semua aktiviti yang berbeza dipaparkan, walaupun yang dengan nilai peratusan sifar, memberikan perwakilan data yang lebih tepat.

Atas ialah kandungan terperinci Bagaimana untuk Mengelakkan Kehilangan Data Apabila Menggunakan Pertanyaan PIVOT pada Rekod Berbeza dengan 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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan