T-SQL ile UNPIVOT islemi nasil yapilir

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.

.

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir