Requête PIVOT avec SQL Server 2012




Comment écrire une requête PIVOT avec SQL Server 2012? La requête SQL PIVOT permet de pivoter des lignes en colonnes, quelle syntaxe pour la requête PIVOT avec SQL Server 2012 ? Cet exemple de requête SQL PIVOT avec SQL Server 2012 permet de construire la requête pas à pas, et passer les lignes en colonnes en faisant une moyenne du montant des ventes par mois.

Seuls les 6 premiers mois de l’année en colonnes sont pivotés, soit de Janvier à Juin, il est facile d’extrapoler et avoir plus de colonnes, pour cela il suffit de copier / coller l’exemple et d’ajouter les mois nécessaires.

Préparer les colonnes pour la requête PIVOT SQL Server 2012

Créer au préalable la table d’exemple VENTES avec ce script :
Script SQL de création de la table d’exemple des VENTES

Note: Exécuter uniquement la partie de création de la table.

-- Insertion des lignes de ventes pour notre exemple PIVOT
INSERT INTO dbo.VENTES ( MOIS, MONTANT ) VALUES  ( N'Janvier', 1000)
INSERT INTO dbo.VENTES ( MOIS, MONTANT ) VALUES  ( N'Février', 2000)
INSERT INTO dbo.VENTES ( MOIS, MONTANT ) VALUES  ( N'Mars', 3000)
INSERT INTO dbo.VENTES ( MOIS, MONTANT ) VALUES  ( N'Avril', 4000)
INSERT INTO dbo.VENTES ( MOIS, MONTANT ) VALUES  ( N'Mai', 5000)
INSERT INTO dbo.VENTES ( MOIS, MONTANT ) VALUES  ( N'Juin', 6000)

-- Insertion du deuxième montant pour chaque mois
INSERT INTO dbo.VENTES ( MOIS, MONTANT ) VALUES  ( N'Janvier', 1100)
INSERT INTO dbo.VENTES ( MOIS, MONTANT ) VALUES  ( N'Février', 2200)
INSERT INTO dbo.VENTES ( MOIS, MONTANT ) VALUES  ( N'Mars', 3300)
INSERT INTO dbo.VENTES ( MOIS, MONTANT ) VALUES  ( N'Avril', 4400)
INSERT INTO dbo.VENTES ( MOIS, MONTANT ) VALUES  ( N'Mai', 5500)
INSERT INTO dbo.VENTES ( MOIS, MONTANT ) VALUES  ( N'Juin', 6600)

-- Vérification des montants en lignes mois par mois
SELECT 	*
FROM 	dbo.VENTES

 

Exemple de requête PIVOT pour SQL Server 2012

La requête PIVOT ci-dessous fait une moyenne des Ventes par Mois en lignes affichées ensuite en colonnes :

SELECT	'Moyenne des Ventes' AS [Ventes_Par_Mois],
[Janvier], [Février], [Mars], [Avril], [Mai], [Juin]
FROM
(
SELECT 	MOIS, MONTANT
FROM 	dbo.VENTES
) AS TableSource

PIVOT
(
AVG(MONTANT)
FOR MOIS IN ([Janvier], [Février], [Mars], [Avril], [Mai],[Juin])
) AS TableDePivot;