May
22
2019

Oracle SQL ile sütunları satırlara çevirme

Geçenlerde, devam eden bir projemizde Oracle SQL ile, bir tablodaki kolonların nasıl satırlara çevrilebileceği ile ilgili bir ihtiyaç hasıl oldu. Kısaca anlatalım.

Aşağıdaki gibi bir tablomuz olduğunu varsayalım.

PK KOLON1 KOLON2 KOLON3 KOLON4 KOLON5
SATIR1 Değer1-1 Değer1-2 Değer1-3    
SATIR2 Değer2-1        
SATIR3 Değer3-1 Değer3-2 Değer3-3 Değer3-4  
SATIR4 Değer4-1 Değer4-2      
SATIR5 Değer5-1 Değer5-2 Değer5-3 Değer5-4 Değer5-5

Aşağıdaki sorguyu kullanarak, buradaki her bir değere ait kolonları satır bazında çoklayarak yazdıracağız.

SELECT PK, KOLON_ADI, DEGER 
        FROM TABLE UNPIVOT EXCLUDE NULLS (DEGER
                         FOR (KOLON_ADI)
                             IN  (KOLON1,
                                  KOLON2,
                                  KOLON3,
                                  KOLON4,
                                  KOLON5
                                 )
                        )

Sorgu sonucu aşağıdaki gibi olacaktır.

PK KOLON_ADI DEGER
SATIR1 KOLON1 Değer1-1
SATIR1 KOLON2 Değer1-2
SATIR1 KOLON3 Değer1-3
SATIR2 KOLON1 Değer2-1
SATIR3 KOLON1 Değer3-1
SATIR3 KOLON2 Değer3-2
SATIR3 KOLON3 Değer3-3
SATIR3 KOLON4 Değer3-4
SATIR4 KOLON1 Değer4-1
SATIR4 KOLON2 Değer4-2
SATIR5 KOLON1 Değer5-1
SATIR5 KOLON2 Değer5-2
SATIR5 KOLON3 Değer5-3
SATIR5 KOLON4 Değer5-4
SATIR5 KOLON5 Değer5-5

EXCLUDE NULLS ifadesini kaldırdığınızda da sorgu aynı sonucu dönecektir.

Tablodaki boş değerleri de göstermek istiyorsak INCLUDE NULLS ifadesini kullanarak aşağıdaki gibi bir sonuca ulaşabiliriz.

PK KOLON_ADI DEGER
SATIR1 KOLON1 Değer1-1
SATIR1 KOLON2 Değer1-2
SATIR1 KOLON3 Değer1-3
SATIR1 KOLON4 Null
SATIR1 KOLON5 Null
SATIR2 KOLON1 Değer2-1
SATIR2 KOLON2 Null
SATIR2 KOLON3 Null
SATIR2 KOLON4 Null
SATIR2 KOLON5 Null
SATIR3 KOLON1 Değer3-1
SATIR3 KOLON2 Değer3-2
SATIR3 KOLON3 Değer3-3
SATIR3 KOLON4 Değer3-4
SATIR3 KOLON5 Null
SATIR4 KOLON1 Değer4-1
SATIR4 KOLON2 Değer4-2
SATIR4 KOLON3 Null
SATIR4 KOLON4 Null
SATIR4 KOLON5 Null
SATIR5 KOLON1 Değer5-1
SATIR5 KOLON2 Değer5-2
SATIR5 KOLON3 Değer5-3
SATIR5 KOLON4 Değer5-4
SATIR5 KOLON5 Değer5-5

Son bir hatırlatma. Oracle database versiyonu 11g ve üstü için UNPIVOT kullanılabilirdir. 

 

Kaynaklar: 

http://www.sqlsnippets.com/en/topic-12698.html

https://stackoverflow.com/questions/38504172/oracle-show-columns-as-row 

https://blogs.oracle.com/sql/how-to-convert-rows-to-columns-and-back-again-with-sql-aka-pivot-and-unpivot 

http://oraclecoder.com/tutorials/how-to-transpose-columns-to-rows-in-oracle–2435

şafak bilir

Gazi Üniversitesi Endüstri Mühendisliği bölümünden 2006 yılında mezun
oldu. Medical Park ve Florence Nightingale İnsan Kaynakları birimlerinde
çalıştı. Yaklaşık 2,5 yıl Workcube ERP yazılımı ile İnsan Kaynakları-Bordro
danışmanlığı ve Proje Yöneticiliği görevlerinde bulundu. 2014 yılından bu
yana ise Oracle HR modülü İş Analisti olarak çalışmaktadır.
şafak bilir


1 Yorum+ Yorum Ekle

  • Gayet açıklayıcı olmuş. Sabahtan beri bunu arıyordum, inanılmaz bir şekilde çözdü benim işimi. Çok teşekkür ederim.

Yorum yapın

*