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
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!