Hurriyet

30 Mayıs 2014 Cuma

Oracle Veritabanı: Pivot ve Unpivot Tablolar

Pivot 

Normal tablolarda bilgiler sütun-değer çiftleri şeklinde tutulmaktadır.

Örnek olarak Scott örnek şemasındaki emp tablosunu kullanabiliriz. Gerçi pivot işlemlerini bütün tablolarda uygulayabiliriz.


Bu tabloda her çalışanın işi, adı soyadı, departman numarası gibi bilgiler tutulmaktadır.

Burada her departman da kaç tane kullanıcının bulunuduğunu görmek için aşağıdaki gibi bir sorgu yazabiliriz.



Departman başına düşen toplam kullanıcıyı bulsak da hangi kullanıcıların hangi departmanda olduğunu temiz bir şekilde göremiyoruz. Bize isim bazında hangi departmana ait olduklarını gösteren bir rapor görmek istersek aşağıdaki gibi bir pivot tablo sorgusu uygulayabiliriz.


for deptno in (...) ifadesi değerlerimizin bunlara kısıtlanmasını sağlar. Dikkat edilmesi gereken başka bir konuda 4 sütunu burada bulunmasıdır. Bu da demek oluyorki tablonun tamamının transposesi alınmamaktadır. Sadece bir kısmının değerleri yukarıya çıkartılırken buna göre veriler gösterilmektedir.

Özet Olarak:

Yukarıda crosstab raporu hazırlamış olduk. 2.resimdeki verileri açıp  isim bazında hangi gruplara ait olduklarını göstermiş olduk. Eskiden departman no'ları satır verileri olarak gösterilirken şimdi başlık olarak kolonlarda gözükmektedir. Bir tablonun transpose edilmesi de denilebilinir.


Unpivot:

Unpivot ile pivot olarak yaratılmış tabloları eski haline getiririz.

Örnek olarak tablomuzu 3.resimdeki gibi pivot olarak yarattığımızı düşünelim.

create table deneme as select * from (select ename,deptno from scott.emp) pivot (count(deptno) for deptno is (10,20,30));

Bu şekilde yarattıktan sonra 2. resimdeki sonuçları elde etmek için unpivot işlemi yapmamız gerekir. Bu durumda da aşağıdaki gibi bir sorgu örneği kullanabiliriz.

select * from deneme
unpivot
(
departments
for deptno in (10,20,30)
);




Hiç yorum yok:

Yorum Gönder