T-SQL ile UNPIVOT islemi nasil yapilir
SQL Serverda özet olarak hazirlanmis verilerin bulundugu bir tabloyu dikey olarak çevirmek için unpivot komutunu kullanabiliriz. Dikey olarak hazirlanmis verileri yataya çevirmek için Pivot komutunun nasil kullanilacagini daha önce yayinladigimiz su makaleden ögrenebilirsiniz.
Ilk olarak kullacagimiz tabloyu ve verilerini hazirlayalim. Bunun için asagidaki scripti kullanabilirsiniz.
CREATE TABLE TelefonKonusma ( AboneID int, Donem int, SehirIciKonusma decimal(10,2), SehirlerArasiKonusma decimal(10,2), GSMKonusma decimal(10,2), ) insert into TelefonKonusma values (1,201101,100.00,20.00,37.00), (1,201102,110.00,15.00,27.00), (1,201103,80.00,22.00,42.00), (2,201101,10.00,560.00,90.00), (2,201102,30.00,21.00,32.00), (2,201103,5.00,10.00,39.00), (3,201101,12.00,72.00,8.00), (3,201102,30.00,34.00,12.00), (3,201103,51.00,20.00,19.00)
Tablomuzda telefon konusmasi yapan aboneler için görüsme yaptiklari yönlere dogru, konusma sürelerinin bulundugu özet veriler var. Bu tabloya select çektigimiz zaman asagidaki veriler gelmekte.
.select * from TelefonKonusma order by 1,2
AboneID Donem SehirIciKonusma SehirlerArasiKonusma GSMKonusma ----------- ----------- ---------------- ---------------------- --------------- 1 201101 100.00 20.00 37.00 1 201102 110.00 15.00 27.00 1 201103 80.00 22.00 42.00 2 201101 10.00 560.00 90.00 2 201102 30.00 21.00 32.00 2 201103 5.00 10.00 39.00 3 201101 12.00 72.00 8.00 3 201102 30.00 34.00 12.00 3 201103 51.00 20.00 19.00 (9 row(s) affected)
Biz Unpivot yaparak yukaridaki verileri asagidaki gibi görmek istiyoruz.
AboneID Donem AramaSuresi AramaYonu ----------- ----------- ---------------------------- ----------------- 1 201101 100.00 SehirIciKonusma 1 201101 20.00 SehirlerArasiKonusma 1 201101 37.00 GSMKonusma 1 201102 110.00 SehirIciKonusma 1 201102 15.00 SehirlerArasiKonusma 1 201102 27.00 GSMKonusma 1 201103 80.00 SehirIciKonusma 1 201103 22.00 SehirlerArasiKonusma 1 201103 42.00 GSMKonusma 2 201101 10.00 SehirIciKonusma 2 201101 560.00 SehirlerArasiKonusma 2 201101 90.00 GSMKonusma 2 201102 30.00 SehirIciKonusma 2 201102 21.00 SehirlerArasiKonusma 2 201102 32.00 GSMKonusma 2 201103 5.00 SehirIciKonusma 2 201103 10.00 SehirlerArasiKonusma 2 201103 39.00 GSMKonusma 3 201101 12.00 SehirIciKonusma 3 201101 72.00 SehirlerArasiKonusma 3 201101 8.00 GSMKonusma 3 201102 30.00 SehirIciKonusma 3 201102 34.00 SehirlerArasiKonusma 3 201102 12.00 GSMKonusma 3 201103 51.00 SehirIciKonusma 3 201103 20.00 SehirlerArasiKonusma 3 201103 19.00 GSMKonusma (27 row(s) affected)
Simdi gelelim UNPIVOT kullanimina ve yukaridaki verileri olusturmaya.
.select * from TelefonKonusma t UNPIVOT ( AramaSuresi FOR AramaYonu IN (SehirIciKonusma,SehirlerArasiKonusma,GSMKonusma) )AS u order by 1,2
Yukaridaki sorguyu çalistirdiginiz zaman istedigimiz sonuca ulasmis olacagiz.
.