Oracle SQL ve Postgre SQL de Pivot Nasıl Yapılır

 Oracle SQL'de aşağıdaki gibi yaptığımız Pivot işlemini PostgreSQL'de yapabilmek için Crosstab komutu kullanılır. Yapacağımız örnekte dört kolona sahip bir tablo düşünelim. KolonBilgiler kolonu aynı kolona yazılmış bilgi başlıklarını, KolonDegerler kolonu bilgi başlıklarına karşılık gelen değerleri içersin. Çıktı olarak ilk iki kolonu tablodan gelecek diğer dört kolonu bilgi başlıklarının kolon olarak gösterileceği bir yapı olsun. Toplamda altı kolon oluşturacağız.

SELECT * FROM
(SELECT Kolon1, Kolon2, KolonBilgiler, KolonDegerler FROM Tablo_adı
) d PIVOT (
MAX(KolonDegerler )
FOR KolonBilgiler
IN (Bilgi1, Bilgi2, Bilgi3,Bilgi4
)) piv
WHERE .....

Yukarıdaki Oracle SQL Pivot sorgusunun Postgre DB karşılığı aşağıdaki gibidir.

SELECT *
FROM crosstab ('SELECT "Kolon1", "Kolon2", "KolonBilgiler", "KolonDegerler ", FROM "Tablo_adı" ORDER  BY 1,2'
, $$SELECT unnest('{Bilgi1, Bilgi2, Bilgi3,Bilgi4}'::text[])$$
) AS ct (Kolon1 text,  Kolon2 text, Bilgi1 text,
Bilgi2 text, Bilgi3 text, Bilgi4 text) 
WHERE .....

Burada dikkat edilmesi gereken konu bilgilerin ve bilgilerin altında seçilecek değer kolonu hariç diğer kolonların hepsinin ct içinde belirtilmesi gerekir. Belirtilmezse crosstab içinde uyumsuz kolon sayısı olduğu uyarısını alabilirsiniz.



Google