Makale Özeti

Özellikle Excel'de ileri seviye kullanıcıların yoğun bir şekilde kullandıkları SQL Server 2000 ve öncesi versiyonlarda ise çoğunlukla birçok view ve procedure yaratarak çözmeye çalıştığımız PIVOT ve UNPIVOT konularına değinmeye çalışacağız...

Makale

Özellikle Excel'de ileri seviye kullanıcıların yoğun bir şekilde kullandıkları SQL Server 2000 ve öncesi versiyonlarda ise çoğunlukla birçok view ve procedure yaratarak çözmeye çalıştığımız PIVOT ve UNPIVOT konularına değinmeye çalışacağız.

PIVOT : Tablonuzda bulunan tekil değerlere uygun olarak Değerlerin Kolon haline dönüşmesini sağlar.
UNPIVOT : PIVOT halde bulunan bir tablonun Kolonlarının Değer haline dönüşmesini sağlar.

PIVOT

<pivot_clause> ::=
        ( aggregate_function ( value_column )
        FOR pivot_column
        IN ( <column_list> )
    )

aggregate_function : Sum, Count, vs gibi aggregate function ailesinin üyeleri kullanılarak PIVOT hale dönüştüreceğiniz tablo üzerinde gruplama işlemleri yapmanızı sağlar.

For : For ifadesinden sonra belirtilecek olan kolon tabloda değer halinde bulunan ve kolana dönüştürülerek PIVOT'u destekleyecek alanı belirtmenizi sağlar.

IN : In operatöründen sonraki kolon listesi hangi değerlerin kolona dönüştürüleceğini belirtmenizi sağlar.



Örnek 1:

USE
AdventureWorks;
GO

SELECT
VendorID, [164] AS Emp1, [198] AS Emp2, [223] AS Emp3, [231] AS Emp4, [233] AS Emp5
FROM

(
SELECT PurchaseOrderID, EmployeeID, VendorID
FROM
Purchasing.PurchaseOrderHeader) p
PIVOT
(

COUNT
(PurchaseOrderID)
FOR EmployeeID IN
(
[164], [198], [223], [231], [233] )
)
AS pvt
ORDER
BY
VendorID





Örnek 2 :

Pivot Öncesi :

USE
AdventureWorks ;
GO
SELECT
DaysToManufacture, AVG(StandardCost) AS AverageCost
FROM
Production.Product
GROUP
BY DaysToManufacture


Pivot Sonrası :

SELECT 'AverageCost' AS Cost_Sorted_By_Production_Days,
[0], [1], [2], [3], [4]
FROM

(
SELECT DaysToManufacture, StandardCost
FROM Production.Product) AS SourceTable
PIVOT
(

AVG
(StandardCost)
FOR
DaysToManufacture IN ([0], [1], [2], [3], [4])
)
AS PivotTable


 


UNPIVOT

<unpivot_clause> ::=
        ( value_column FOR pivot_column IN ( <column_list> ) )

value_column : Pivot formattaki tablonun hangi kolon üzerinden unpivot hale dönüştürüleceğini belirtir. Yani Değer haline dönüştürülecek kolonu ifade eder.

IN : Unpivot formata dönüştürülürken kullanılacak değerleri ifade eder.


Örnek 3 :

CREATE TABLE pvt (VendorID int, Emp1 int, Emp2 int,
Emp3 int, Emp4 int, Emp5 int)
GO

INSERT
INTO pvt VALUES (1,4,3,5,4,4)
INSERT
INTO pvt VALUES (2,4,1,5,5,5)
INSERT
INTO pvt VALUES (3,4,3,5,4,4)
INSERT
INTO pvt VALUES (4,4,2,5,5,4)
INSERT
INTO pvt VALUES (5,5,1,5,5,5)
GO

SELECT VendorID, Employee, Orders
FROM

(SELECT VendorID, Emp1, Emp2, Emp3, Emp4, Emp5
FROM pvt) p
UNPIVOT
(
Orders FOR Employee IN
(
Emp1, Emp2, Emp3, Emp4, Emp5)
)
AS
unpvt
GO




Evren AYAN
Microsoft MVP - Connected System Developer
http://www.evrenayan.net