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
http://oraclecoder.com/tutorials/how-to-transpose-columns-to-rows-in-oracle–2435
- Oracle SQL ile sütunları satırlara çevirme - 22 Mayıs 2019
- Kullanıcı – Sorumluluk – Güvenlik Profili scripti - 19 Şubat 2019
- SSHR izin tarih çakışma kontrollerinde iptal statülü kayıtlar - 09 Şubat 2018
Yazar şafak bilir





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