Ich habe die folgende Herausforderung. Ich muss Tabellendaten zweimal über dieselbe Spalte drehen. Hier ist ein Screenshot der Daten.Ist es möglich, mehrere Pivots mit der gleichen Pivot-Spalte mit SQL Server
Ich mag eine Zeile für jedes Item ID habe sowohl den Kaufwert und den Verkaufswert für jedes Jahr enthält. Ich habe versucht, dies zu tun, indem Sie die "Jahr" -Spalte zweimal, formatieren sie ein wenig, so dass jedes Verkaufsjahr mit einem "S" vorangestellt wird und jedes Jahr beginnt mit einem "P", und mit 2 Pivots um das 2 Jahr zu drehen Säulen. Hier ist die SQL-Abfrage (verwendet in SQL Server 2008):
SELECT [Item ID],
[P2000],[P2001],[P2002],[P2003],
[S2000],[S2001],[S2002],[S2003]
FROM
(
SELECT [Item ID]
,'P' + [Year] AS YearOfPurchase
,'S' + [Year] AS YearOfSelling
,[Purchasing value]
,[Selling value]
FROM [ItemPrices]
) AS ALIAS
PIVOT
(
MIN ([Purchasing value]) FOR [YearOfPurchase] in ([P2000],[P2001],[P2002],[P2003])
)
AS pvt
PIVOT
(
MIN ([Selling value]) FOR [YearOfSelling] in ([S2000],[S2001],[S2002],[S2003])
)
AS pvt2
Das Ergebnis ist nicht genau das, was ich gehofft hatte (siehe Bild unten):
Wie Sie sehen können, gibt sind immer noch mehr als eine Zeile für jede Artikel-ID. Gibt es eine Möglichkeit, die Anzahl der Zeilen auf genau eins pro Element zu reduzieren? So dass es ein bisschen wie der Excel-Screenshot unten aussieht?
Danke für die Unpivot-Vorschlag. Das war mir nicht in den Sinn gekommen (und nicht sicher, ob es in Zukunft so sein würde :-)) –
@RobVermeulen Ja die Unpivot-Funktion funktioniert super. Ich habe gerade meine Antwort mit einer Version aktualisiert, die 'cross apply' verwendet. Die beiden werden das gleiche Ergebnis erhalten. – Taryn
Würde "Cross Apply" schneller sein? –