4/6/2007
Pivot ve Unpivot
Ö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
( aggregate_******** ( value_column )
FOR pivot_column
IN (
)
aggregate_******** : Sum, Count, vs gibi aggregate ******** 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
( value_column FOR pivot_column IN (
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
Kategori: (Belirtilmemiş) :: Yorum yaz!
:: Arkadaşına Gönder!