samedi 1 décembre 2012

Pivot Et Unpivot


Si vous avez déjà travaillé avec Microsoft Access, vous auriez pu utiliser l'instruction TRANSFORM pour créer une requête Analyse croisée. Même si la fonctionnalité similaire a été manquée dans SQL Server 2000, nous pouvons réaliser la même chose dans SQL Server 2005 via l'opérateur PIVOT avec l'instruction SELECT. L'opérateur PIVOT peut être utilisé pour transformer un ensemble de lignes en colonnes alors que l'opérateur UNPIVOT complète l'opérateur PIVOT en vous permettant de transformer des colonnes en lignes.

Voici un exemple

DECLARE @ tblStudents table (

StudentID IDENTITÉ INT,

StudentName VARCHAR (100),

CollegeName VARCHAR (100),

JoinedOn DATETIME
)
INSERT INTO @ tblStudents
SELECT 'Zero', 'College_One', '20010101 '
UNION ALL
SELECT 'One', 'College_One', '20010102 '
UNION ALL
SELECT 'Deux', 'College_One', '20010202 '
UNION ALL
SELECT 'Trois', 'College_Two', '20010202 '
UNION ALL
SELECT 'Quatre', 'College_One', '20020302 '
UNION ALL
SELECT «Cinq», «College_One ', '20030202'
UNION ALL
SELECT 'Six', 'College_Two', '20040202 '
UNION ALL
SELECT 'Seven', 'College_Two', '20040202 '
UNION ALL
SELECT 'Huit »,« College_Three', '20040202 '

SELECT *
D'@ tblStudents

SELECT CollegeName,

[2001] AS Yr2001,

[2002] AS Yr2002,

[2003] AS Yr2003,

[2004] AS Yr2004
FROM (SELECT StudentName,

CollegeName,

ANNÉE (JoinedOn) Yr

D'@ tblStudents) ts
PIVOT (Count (StudentName) POUR EN An ([2001], [2002], [2003], [2004])) tp



Voici un autre exemple

Exemple2

USE AdventureWorks

SELECT EmployeeID,

[2002] Yr2002,

[2003] Yr2003,

[2004] Yr2004
FROM (SELECT YEAR (date de commande) OrderYear,

EmployeeID,

TotalDue

DE Purchasing.PurchaseOrderHeader) poh
PIVOT (SUM (TotalDue) POUR EN OrderYear ([2002], [2003], [2004])) pvt
ORDER BY EmployeeID

Exemple 3:

DECLARE TABLE onglet @ (id INT IDENTITY état, VARCHAR (1000))
INSERT INTO SELECT @ Tab 'Terminé'
INSERT INTO SELECT @ Tab "Soumis"
INSERT INTO 'InProgress "@ Tab SELECT
INSERT INTO SELECT @ Tab "Soumis"
INSERT INTO SELECT @ Tab 'Terminé'

SELECT [Expédition], [Terminé], [InProgress]
DE (

Statut SELECT COUNT (*) cnt
Partir de l'onglet @
GROUP BY Statut) t
PIVOT (SUM (CNT) pour Statut IN ([Soumis], [Terminé], [InProgress])) a

...

Aucun commentaire:

Enregistrer un commentaire