Dynamische PIVOT-Abfrage für eindeutige Datensätze
Problem:
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 |
Die Verwendung einer Standard-PIVOT-Abfrage kann schwierig sein Behalten Sie eindeutige Datensätze mit 0,00-Prozentsätzen bei. Die MAX-Funktion ignoriert diese Zeilen oft, was zu unvollständigen Ergebnissen führt.
Erwartetes Ergebnis:
| 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 |
Lösung:
Um dieses Problem zu beheben, können wir eine ROW_NUMBER()-Funktion in die PIVOT-Abfrage einführen. Diese Funktion weist den Datensätzen innerhalb jeder Namensgruppe Zeilennummern zu und stellt so sicher, dass auch Datensätze mit 0,00-Prozentsätzen beibehalten werden.
;with cte as ( select *, ROW_NUMBER() over (partition by name order by percentage desc) ROWNUM from table_name ), 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
Erklärung:
Wichtig Hinweis:
Um die Abfrage dynamisch zu gestalten, können wir die hartcodierten Werte „name“ und „name1“ durch dynamische Variablen ersetzen, die zur Laufzeit gefüllt werden können. Dadurch kann die Abfrage Tabellen mit unterschiedlicher Spaltenanzahl verarbeiten.
Das obige ist der detaillierte Inhalt vonWie kann man eine Tabelle dynamisch PIVOTIEREN und eindeutige Datensätze ohne Prozentsätze beibehalten?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!