Est-il possible d'avoir plusieurs pivots en utilisant la même colonne pivot en utilisant SQL Server
Je suis confronté au défi suivant. J'ai besoin de tourner la table de données à deux reprises au cours de la même colonne.
Voici une capture d'écran des données.
Je veux avoir une ligne pour chaque ID de l'Élément contenant à la fois la valeur d'achat et la valeur de vente pour chaque année.
J'ai essayé de faire cela en sélectionnant le "an" de la colonne deux fois, la mise en forme un peu de sorte que chaque vente année, obtient le préfixe avec un "S" et chaque achat, l'année commence par un "P", et à l'aide de 2 pivots pour tourner autour de la 2 année de colonnes. Voici la requête SQL (utilisé dans 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
Le résultat n'est pas exactement ce que j'espérais (voir image ci-dessous):
Comme vous pouvez le voir, il y a encore plus d'une ligne pour chaque ID de l'élément. Est-il un moyen de réduire le nombre de lignes à exactement un élément par élément? De sorte qu'il ressemble un peu à la Excel capture d'écran ci-dessous?
source d'informationauteur Rob Vermeulen
Vous devez vous connecter pour publier un commentaire.
Ma suggestion serait d'appliquer à la fois la
UNPIVOT
et laPIVOT
fonctions pour obtenir le résultat.La
UNPIVOT
va tourner lePurchasingValue
etSellingValue
colonnes en lignes. Une fois cela fait, vous pouvez alors faites pivoter les données dans votre suite.Le code sera:
Voir SQL jouer avec la Démo. Le résultat est:
Dans SQL Server 2008+ vous pouvez utiliser
CROSS APPLY
avecVALUES
avec lePIVOT
fonction:Voir SQL jouer avec la Démo
Utiliser un GROUPE PAR ItemID, avec fonction d'agrégation SOMME(isnull(valeur 0)) sur chacune des colonnes des résultats.
Un moyen facile de le pivot plusieurs colonnes est de simplement utiliser l'ensemble(Cas), des expressions.