Sono di fronte alla seguente sfida. Devo ruotare i dati della tabella due volte sulla stessa colonna. Ecco uno screenshot dei dati.È possibile avere più pivot utilizzando la stessa colonna pivot utilizzando SQL Server
voglio avere una riga per ogni ID oggetto che contiene sia il valore di acquisto ed il valore di vendita per ogni anno. Ho provato a farlo selezionando due volte la colonna "anno", formattandola leggermente in modo che ogni anno di vendita venga preceduta da una "S" e ogni anno di acquisto inizia con una "P" e utilizzando 2 perni ruotano attorno ai 2 anni colonne. Ecco la query SQL (utilizzato 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
Il risultato non è esattamente quello che speravo (vedi immagine sotto):
Come si può vedere, ci sono ancora più di una riga per ogni ID oggetto. C'è un modo per ridurre il numero di righe a esattamente uno per articolo? In modo che assomigli un po 'allo screenshot di Excel qui sotto?
Grazie per il suggerimento unpivot. Questo non mi è passato per la testa (e non sono sicuro se lo sarebbe in futuro :-)) –
@RobVermeulen Sì, la funzione unpivot funziona alla grande. Ho appena aggiornato la mia risposta con una versione che usa anche la croce applicata. Entrambi otterranno lo stesso risultato. – Taryn
La "croce applicata" sarebbe più veloce? –