Heim > Datenbank > MySQL-Tutorial > Wie kann ein Datenverlust vermieden werden, wenn PIVOT-Abfragen für eindeutige Datensätze mit Nullwerten verwendet werden?

Wie kann ein Datenverlust vermieden werden, wenn PIVOT-Abfragen für eindeutige Datensätze mit Nullwerten verwendet werden?

DDD
Freigeben: 2025-01-05 20:20:41
Original
962 Leute haben es durchsucht

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

Vermeidung von Datenverlust bei PIVOT-Abfragen für eindeutige Datensätze

Problem:
PIVOT-Abfragen sind nützlich für die Umstrukturierung Daten, um Informationen besser organisiert anzuzeigen. Bei der Verarbeitung eindeutiger Datensätze kann die MAX-Aggregationsfunktion jedoch dazu führen, dass Nullwerte weggelassen werden, was zu unvollständigen Daten führt.

Lösung:
Um alle eindeutigen Datensätze beizubehalten, auch diese Bei Nullwerten kann man die Funktion ROW_NUMBER() in die PIVOT-Abfrage integrieren. Dieser Ansatz weist jedem Datensatz eine Zeilennummer zu und behält so die Zuordnung zwischen Aktivitäten und Prozentsätzen bei.

;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
Nach dem Login kopieren

Beispiel:

Betrachten Sie die folgende Tabelle:

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

Früher hätte eine Standard-PIVOT-Abfrage Folgendes ergeben Ergebnis:

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

Durch die Einbindung der Funktion ROW_NUMBER() behält die geänderte Abfrage jedoch alle unterschiedlichen Datensätze bei:

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

Dieser Ansatz stellt sicher, dass alle unterschiedlichen Aktivitäten angezeigt werden, auch diese mit Null-Prozentwerten, was eine genauere Darstellung der Daten ermöglicht.

Das obige ist der detaillierte Inhalt vonWie kann ein Datenverlust vermieden werden, wenn PIVOT-Abfragen für eindeutige Datensätze mit Nullwerten verwendet werden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage