Rapor halindeki verilerin daha anlaşılır biçimde görünmesini
sağlamak amacıyla pivot tablolar kullanılır. Pivot tabloda satırları sütun
haline dönüştürüp, dataların daha kolay yorumlanması sağlanır.
Pivot tablonun yazım formatı aşağıdaki gibidir.
SELECT
[sutun1],
[sutun2]
...
FROM (
SELECT -- select cümlesi ile pivot sql sorgusu.
) AS TableAlias -- Tablo için takma ad.
PIVOT
(
<MIN,MAX,SUM,COUNT...gibi fonksiyonlar>(yapılacak işlem göre yer alacak sütun veya sütunlar)
FOR [Pivot tablo sütunları için sütun adını içeren değer veya değerler]
IN (
[sutun1], ... ,[sutun5] -- görüntülenecek sutunlar
)
) AS PivotTableAlias -- Pivot tablo için verilen takma ad.
ORDER BY clause -- tercihe göre isterseniz belli bir kritele sıralamada yaptırabilirsiniz.
[sutun1],
[sutun2]
...
FROM (
SELECT -- select cümlesi ile pivot sql sorgusu.
) AS TableAlias -- Tablo için takma ad.
PIVOT
(
<MIN,MAX,SUM,COUNT...gibi fonksiyonlar>(yapılacak işlem göre yer alacak sütun veya sütunlar)
FOR [Pivot tablo sütunları için sütun adını içeren değer veya değerler]
IN (
[sutun1], ... ,[sutun5] -- görüntülenecek sutunlar
)
) AS PivotTableAlias -- Pivot tablo için verilen takma ad.
ORDER BY clause -- tercihe göre isterseniz belli bir kritele sıralamada yaptırabilirsiniz.
Adventure Works databaseini
kullanarak pivot tablo kullanımı aşağıdaki şekilde özetlenebilir.
Pivot table kullanmadan
örnek bir query yazarsak;
select PC.Name,P.Color,count(*) ProductCount
from Production.Product P
inner join Production.ProductSubcategory
PSC on PSC.ProductSubcategoryID=P.ProductSubcategoryID
inner join Production.ProductCategory
PC on PC.ProductCategoryID=PSC.ProductCategoryID
group by PC.Name,P.Color
Sonuç aşağıdaki şekilde bir tablo olur.
Bu tabloda Product
Category ve Color bazında ProductCount hesabı bulunmaktadır.
Bunun yerine pivot tablo kullanılsaydı query şu şekilde
olabilirdi.
select *
from
(
select PC.Name,P.Color, P.ProductID
from Production.Product P
inner join Production.ProductSubcategory
PSC on PSC.ProductSubcategoryID=P.ProductSubcategoryID
inner join Production.ProductCategory
PC on PC.ProductCategoryID=PSC.ProductCategoryID
) as
DataTable
pivot
(
count(ProductID)
for Name
IN ([Bikes],[Components],[Clothing],[Accessories])
)
as PivotTable
Sonuç da aşağıdaki şekilde olur.