{"id":379,"date":"2013-09-18T17:04:17","date_gmt":"2013-09-18T14:04:17","guid":{"rendered":"http:\/\/www.ozgurguler.net\/?p=379"},"modified":"2015-02-02T11:14:02","modified_gmt":"2015-02-02T09:14:02","slug":"pivot-unpivot-operatorleri","status":"publish","type":"post","link":"https:\/\/www.ozgurguler.net\/blog\/pivot-unpivot-operatorleri\/","title":{"rendered":"Pivot-Unpivot Operat\u00f6rleri"},"content":{"rendered":"<h2>Pivot-Unpivot Operat\u00f6rleri<\/h2>\n<div>Veritaban\u0131 Y\u00f6netim Sistemi platformlar\u0131nda (Sql Server, Oracle v.b.) yer alan herkesin pek bilmedi\u011fi Pivot ve Unpivot Operat\u00f6rleri bulunmaktad\u0131r. \u015eimdi gelin hep birlikte Pivot-Unpivot operat\u00f6rlerini inceleyelim. Pivot ve Unpivot operat\u00f6rleri daha \u00e7ok OLAP bi\u00e7imindeki sorgulamalarda ve a\u00e7\u0131k \u015fema uygulamalar\u0131nda ihtiya\u00e7 duyulabilen operat\u00f6rlerdir. Burada OLAP ve a\u00e7\u0131k \u015fema uygulamalar\u0131 derken kastedilen \u015feyi k\u0131saca a\u00e7\u0131klamak yerinde olur. OLAP, veriler \u00fczerinde derinlemesine analiz yap\u0131labilmesine olanak tan\u0131yan bir teknolojidir.<\/div>\n<div>\n<p>A\u00e7\u0131k \u015fema uygulamalar\u0131 ise haz\u0131rlanm\u0131\u015f bir tablonun normalizasyon kurallar\u0131 i\u00e7inde yeterli \u00e7\u00f6z\u00fcmleri sa\u011flayamad\u0131\u011f\u0131 durumlarda farkl\u0131 bir tablo \u00fczerinde sat\u0131rlar\u0131n s\u00fctunlara veya s\u00fctunlar\u0131n sat\u0131rlara d\u00f6n\u00fc\u015ft\u00fcr\u00fclmesi gereklili\u011fidir. \u0130\u015fte bu tip durumlarda devreye Pivot ve Unpivot operat\u00f6rleri girer. Pivot operat\u00f6r\u00fc bir tablonun sat\u0131rlar\u0131n\u0131 yani belirli kay\u0131tlar\u0131n\u0131 s\u00fctunlara \u00e7evirir. Unpivot operat\u00f6r\u00fc ise bir tablonun s\u00fctunlar\u0131n\u0131 sat\u0131rlara \u00e7evirmektedir. Biliyorum ki bu konuda \u00f6rnekler yaparsak konu daha iyi anla\u015f\u0131lacakt\u0131r.<\/p>\n<\/div>\n<h2><\/h2>\n<p><!--more--><\/p>\n<h2><\/h2>\n<div>\n<p>&nbsp;<\/p>\n<div>\n<p>Tablomuzu Sql kodlar\u0131 ile olu\u015fturmak isteyenler i\u00e7in a\u015fa\u011f\u0131daki kodlar\u0131 kullanabiliriz.<\/p>\n<div>\n<div>\n<div>\n<table>\n<tbody>\n<tr>\n<td><code>1<\/code><\/td>\n<td><code>Create Table BilgisayarDetay(<\/code><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<div>\n<table>\n<tbody>\n<tr>\n<td><code>2<\/code><\/td>\n<td><code>BilgisayarKod\u00a0<\/code><code>int<\/code><code>,<\/code><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<div>\n<table>\n<tbody>\n<tr>\n<td><code>3<\/code><\/td>\n<td><code>Nitelikler nvarchar(50),<\/code><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<div>\n<table>\n<tbody>\n<tr>\n<td><code>4<\/code><\/td>\n<td><code>Aciklama nvarchar(50)<\/code><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<div>\n<table>\n<tbody>\n<tr>\n<td><code>5<\/code><\/td>\n<td><code>)<\/code><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<\/div>\n<p>Ard\u0131ndan olu\u015fturdu\u011fumuz bu tabloya insert c\u00fcmleci\u011fi vas\u0131tas\u0131yla kay\u0131tlar ekleyelim. Ben a\u015fa\u011f\u0131daki gibi eklemeler yapt\u0131m.<\/p>\n<div>\n<div>\n<div>\n<table>\n<tbody>\n<tr>\n<td><code>01<\/code><\/td>\n<td><code>insert into BilgisayarDetay(BilgisayarKod,<wbr \/>Nitelikler,Aciklama)values (1000,<\/code><code>'Bellek (GB)'<\/code><code>,<\/code><code>'3'<\/code><code>)<\/code><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<div>\n<table>\n<tbody>\n<tr>\n<td><code>02<\/code><\/td>\n<td><code>insert into BilgisayarDetay(BilgisayarKod,<wbr \/>Nitelikler,Aciklama)values (1000,<\/code><code>'Sabit Disk (GB)'<\/code><code>,<\/code><code>'500'<\/code><code>)<\/code><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<div>\n<table>\n<tbody>\n<tr>\n<td><code>03<\/code><\/td>\n<td><code>insert into BilgisayarDetay(BilgisayarKod,<wbr \/>Nitelikler,Aciklama)values (1000,<\/code><code>'Ekran (MB)'<\/code><code>,<\/code><code>'512'<\/code><code>)<\/code><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<div>\n<table>\n<tbody>\n<tr>\n<td><code>04<\/code><\/td>\n<td><code>insert into BilgisayarDetay(BilgisayarKod,<wbr \/>Nitelikler,Aciklama)values (1000,<\/code><code>'Boyut (Inch)'<\/code><code>,<\/code><code>'19'<\/code><code>)<\/code><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<div>\n<table>\n<tbody>\n<tr>\n<td><code>05<\/code><\/td>\n<td><code>insert into BilgisayarDetay(BilgisayarKod,<wbr \/>Nitelikler)values (1000,<\/code><code>'Web Cam'<\/code><code>)<\/code><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<div>\n<table>\n<tbody>\n<tr>\n<td><code>06<\/code><\/td>\n<td><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<div>\n<table>\n<tbody>\n<tr>\n<td><code>07<\/code><\/td>\n<td><code>insert into BilgisayarDetay(BilgisayarKod,<wbr \/>Nitelikler,Aciklama)values (1001,<\/code><code>'Bellek (GB)'<\/code><code>,<\/code><code>'4'<\/code><code>)<\/code><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<div>\n<table>\n<tbody>\n<tr>\n<td><code>08<\/code><\/td>\n<td><code>insert into BilgisayarDetay(BilgisayarKod,<wbr \/>Nitelikler,Aciklama)values (1001,<\/code><code>'Sabit Disk (GB)'<\/code><code>,<\/code><code>'800'<\/code><code>)<\/code><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<div>\n<table>\n<tbody>\n<tr>\n<td><code>09<\/code><\/td>\n<td><code>insert into BilgisayarDetay(BilgisayarKod,<wbr \/>Nitelikler,Aciklama)values (1001,<\/code><code>'Ekran (MB)'<\/code><code>,<\/code><code>'1024'<\/code><code>)<\/code><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<div>\n<table>\n<tbody>\n<tr>\n<td><code>10<\/code><\/td>\n<td><code>insert into BilgisayarDetay(BilgisayarKod,<wbr \/>Nitelikler,Aciklama)values (1001,<\/code><code>'Boyut (Inch)'<\/code><code>,<\/code><code>'21'<\/code><code>)<\/code><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<div>\n<table>\n<tbody>\n<tr>\n<td><code>11<\/code><\/td>\n<td><code>insert into BilgisayarDetay(BilgisayarKod,<wbr \/>Nitelikler,Aciklama)values (1001,<\/code><code>'Web Cam'<\/code><code>,<\/code><code>'Var'<\/code><code>)<\/code><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<div>\n<table>\n<tbody>\n<tr>\n<td><code>12<\/code><\/td>\n<td><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<div>\n<table>\n<tbody>\n<tr>\n<td><code>13<\/code><\/td>\n<td><code>insert into BilgisayarDetay(BilgisayarKod,<wbr \/>Nitelikler,Aciklama)values (1002,<\/code><code>'Bellek (GB)'<\/code><code>,<\/code><code>'2'<\/code><code>)<\/code><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<div>\n<table>\n<tbody>\n<tr>\n<td><code>14<\/code><\/td>\n<td><code>insert into BilgisayarDetay(BilgisayarKod,<wbr \/>Nitelikler,Aciklama)values (1002,<\/code><code>'Sabit Disk (GB)'<\/code><code>,<\/code><code>'1024'<\/code><code>)<\/code><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<div>\n<table>\n<tbody>\n<tr>\n<td><code>15<\/code><\/td>\n<td><code>insert into BilgisayarDetay(BilgisayarKod,<wbr \/>Nitelikler,Aciklama)values (1002,<\/code><code>'Ekran (MB)'<\/code><code>,<\/code><code>'1024'<\/code><code>)<\/code><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<div>\n<table>\n<tbody>\n<tr>\n<td><code>16<\/code><\/td>\n<td><code>insert into BilgisayarDetay(BilgisayarKod,<wbr \/>Nitelikler,Aciklama)values (1002,<\/code><code>'Boyut (Inch)'<\/code><code>,<\/code><code>'17'<\/code><code>)<\/code><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<div>\n<table>\n<tbody>\n<tr>\n<td><code>17<\/code><\/td>\n<td><code>insert into BilgisayarDetay(BilgisayarKod,<wbr \/>Nitelikler)values (1002,<\/code><code>'Web Cam'<\/code><code>)<\/code><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<\/div>\n<p>&nbsp;<\/p>\n<p>\u015eimdi gelin Nitelikler k\u0131sm\u0131nda yer alan sat\u0131rlar\u0131 yani kay\u0131tlar\u0131 Pivot operat\u00f6r\u00fc ile s\u00fctunlara \u00e7evirelim. Bu i\u015fi ger\u00e7ekle\u015ftirmek i\u00e7in a\u015fa\u011f\u0131daki gibi bir Sql kod blo\u011fu yazmam\u0131z gerekiyor.<\/p>\n<div>\n<div>\n<div>\n<table>\n<tbody>\n<tr>\n<td><code>1<\/code><\/td>\n<td><code>WITH BilgisayarOzellik AS(<\/code><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<div>\n<table>\n<tbody>\n<tr>\n<td><code>2<\/code><\/td>\n<td><code>SELECT * FROM BilgisayarDetay<\/code><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<div>\n<table>\n<tbody>\n<tr>\n<td><code>3<\/code><\/td>\n<td><code>)<\/code><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<div>\n<table>\n<tbody>\n<tr>\n<td><code>4<\/code><\/td>\n<td><code>SELECT Kayit.* FROM BilgisayarOzellik<\/code><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<div>\n<table>\n<tbody>\n<tr>\n<td><code>5<\/code><\/td>\n<td><code>PIVOT(MAX(Aciklama)<\/code><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<div>\n<table>\n<tbody>\n<tr>\n<td><code>6<\/code><\/td>\n<td><code>FOR Nitelikler IN ([Bellek (GB)],[Sabit Disk (GB)],[Ekran (MB)],[Boyut (Inch)],[Web Cam])<\/code><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<div>\n<table>\n<tbody>\n<tr>\n<td><code>7<\/code><\/td>\n<td><code>)AS Kayit<\/code><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<\/div>\n<p>Bu kod blo\u011funu \u015fu \u015fekilde a\u00e7\u0131klayabiliriz; \u00f6ncelikle BilgisayarDetay isimli tablomuzun kay\u0131tlar\u0131n\u0131 pivot sorgusunun \u00e7al\u0131\u015ft\u0131r\u0131laca\u011f\u0131 BilgisayarOzellik ad\u0131nda sanal bir tabloya yani sonradan t\u00fcretti\u011fimiz bir tabloya aktard\u0131k. Ard\u0131ndan \u201cSELECT Kayit.* FROM BilgisayarOzellik\u201d sat\u0131r\u0131 ile BilgisayarOzellik isimli sanal tablomuzun b\u00fct\u00fcn s\u00fct\u00fcnlar\u0131n\u0131 se\u00e7mi\u015f bulunuyoruz. Sonraki kod sat\u0131r\u0131m\u0131zda MAX fonksiyonu akl\u0131n\u0131z\u0131 kar\u0131\u015ft\u0131rm\u0131\u015f,neden b\u00f6yle bir fonksiyon kulland\u0131k diyebilirsiniz. Pivot operat\u00f6r\u00fcm\u00fcz\u00fcn \u00e7al\u0131\u015fabilmesi i\u00e7in gruplama yapabilen bir fonsiyon gereklidir. Bu fonksiyon MAX, MIN veya SUM gibi gruplama yapabilen bir fonksiyon olabilir.<\/p>\n<p>Biz burada Aciklama s\u00fct\u00fcnuna g\u00f6re MAX fonksiyonu ile bir gruplama yapt\u0131k.Son olarak \u201cFOR Nitelikler IN ([Bellek (GB)],[Sabit Disk (GB)],[Ekran (MB)],[Boyut (Inch)],[Web Cam])\u201d sql kod sat\u0131r\u0131 ile Nitelikler s\u00fctunundaki kay\u0131tlar\u0131 kullanarak sat\u0131rlar\u0131 s\u00fctunlara \u00e7evirmek istedi\u011fimizi belirttik. Sat\u0131rlar\u0131 s\u00fctunlara \u00e7evrilecek k\u0131s\u0131mlar k\u00f6\u015feli parantez i\u00e7inde yaz\u0131lm\u0131\u015ft\u0131r. \u015eimdi yazd\u0131\u011f\u0131m\u0131z bu kod blo\u011funu \u00e7al\u0131\u015ft\u0131rd\u0131\u011f\u0131m\u0131zda ekrana gelecek sonucu g\u00f6relim.<\/p>\n<p>Yukar\u0131daki \u015fekilden de g\u00f6rd\u00fc\u011f\u00fcm\u00fcz gibi Nitelikler i\u00e7inde yer alan sat\u0131rlar s\u00fctunlara d\u00f6n\u00fc\u015fm\u00fc\u015f durumda ve Aciklama s\u00fctunundaki veriler bu yeni s\u00fctunlar i\u00e7indeki kay\u0131tlar olarak yerini alm\u0131\u015ft\u0131r.<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>Yukar\u0131da bulunan \u015fekildeki gibi baz\u0131 kay\u0131tlar\u0131m\u0131z\u0131 tablomuza girdikten sonra Unpivot operat\u00f6r\u00fcm\u00fcz\u00fc kullanabiliriz.<\/p>\n<div>\n<div>\n<div>\n<table>\n<tbody>\n<tr>\n<td><code>1<\/code><\/td>\n<td><code>SELECT satislar.* FROM Satis<\/code><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<div>\n<table>\n<tbody>\n<tr>\n<td><code>2<\/code><\/td>\n<td><code>UNPIVOT (Sat\u0131\u015fMiktari FOR Y\u0131llar IN ([2007],[2008],[2009])<\/code><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<div>\n<table>\n<tbody>\n<tr>\n<td><code>3<\/code><\/td>\n<td><code>)AS satislar<\/code><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<\/div>\n<p>Bu kod blo\u011funda Satis tablosunun b\u00fct\u00fcn s\u00fctunlar\u0131,kay\u0131tlar\u0131 satislar isimli sanal bir tabloya aktar\u0131lm\u0131\u015ft\u0131r. 2007,2008,2009 isimli s\u00fctunlar sat\u0131rlara d\u00f6n\u00fc\u015ft\u00fcr\u00fclmek \u00fczere Unpivot operat\u00f6r\u00fc kullan\u0131lm\u0131\u015ft\u0131r.<\/p>\n<p>&nbsp;<\/p>\n<\/div>\n<p>&nbsp;<\/p>\n<div><\/div>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>Pivot-Unpivot Operat\u00f6rleri Veritaban\u0131 Y\u00f6netim Sistemi platformlar\u0131nda (Sql Server, Oracle v.b.) yer alan herkesin pek bilmedi\u011fi Pivot ve Unpivot Operat\u00f6rleri bulunmaktad\u0131r. \u015eimdi gelin hep birlikte Pivot-Unpivot operat\u00f6rlerini inceleyelim. Pivot ve Unpivot operat\u00f6rleri daha \u00e7ok OLAP bi\u00e7imindeki sorgulamalarda ve a\u00e7\u0131k \u015fema uygulamalar\u0131nda ihtiya\u00e7 duyulabilen operat\u00f6rlerdir. Burada OLAP ve a\u00e7\u0131k \u015fema uygulamalar\u0131 derken kastedilen \u015feyi k\u0131saca a\u00e7\u0131klamak yerinde [&hellip;]<\/p>\n","protected":false},"author":4,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[10],"tags":[],"class_list":["post-379","post","type-post","status-publish","format-standard","hentry","category-sql-server-tsql"],"_links":{"self":[{"href":"https:\/\/www.ozgurguler.net\/blog\/wp-json\/wp\/v2\/posts\/379","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.ozgurguler.net\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.ozgurguler.net\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.ozgurguler.net\/blog\/wp-json\/wp\/v2\/users\/4"}],"replies":[{"embeddable":true,"href":"https:\/\/www.ozgurguler.net\/blog\/wp-json\/wp\/v2\/comments?post=379"}],"version-history":[{"count":3,"href":"https:\/\/www.ozgurguler.net\/blog\/wp-json\/wp\/v2\/posts\/379\/revisions"}],"predecessor-version":[{"id":382,"href":"https:\/\/www.ozgurguler.net\/blog\/wp-json\/wp\/v2\/posts\/379\/revisions\/382"}],"wp:attachment":[{"href":"https:\/\/www.ozgurguler.net\/blog\/wp-json\/wp\/v2\/media?parent=379"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.ozgurguler.net\/blog\/wp-json\/wp\/v2\/categories?post=379"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.ozgurguler.net\/blog\/wp-json\/wp\/v2\/tags?post=379"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}