{"id":146,"date":"2012-02-15T17:47:00","date_gmt":"1970-01-01T00:00:00","guid":{"rendered":"http:\/\/www.yazilimmutfagi.com\/?p=146"},"modified":"2012-02-15T17:47:00","modified_gmt":"1970-01-01T00:00:00","slug":"sql-serverda-dinamik-order-by-kullanimi","status":"publish","type":"post","link":"https:\/\/www.yazilimmutfagi.com\/index.php\/2012\/02\/15\/sql-serverda-dinamik-order-by-kullanimi\/","title":{"rendered":"SQL Serverda Dinamik Order by Kullanimi"},"content":{"rendered":"\n<h2>SQL Serverda Dinamik Order by Kullanimi:<\/h2>\n<p>\nBazen yazdigimiz TSQL scriplerde datalari dinamik olarak siralama ihtiyaci duyariz. Yeni farkli durumlarda farkli kolonlara g\u00f6re siralama (order by) yapmamiz gerekir. Bunu \u00e7ogunuz farkli siralama yapan dinamik sorgularla \u00e7\u00f6zmeye \u00e7alisir, halbuki order by kisminda case ifadesi i\u00e7inde farkli durumlara g\u00f6re farkli siralama kolonlari se\u00e7ebiliriz. Bir stored procedur olusturalim ve g\u00f6nderecegimiz parametreye g\u00f6re farkli kolonlara g\u00f6re siralama yapalim.\n<a href='www.yazilimmutfagi.com'>.<\/a>\n<\/p>\n<p>\u00d6rneklerde kullanacagimiz Musteri tablosu ve datalarini asagidaki sorgulari kendi makinanizda \u00e7alistirarak olusturabilirsiniz.<\/p>\n<pre class=\"brush: sql;\">\n \n create table Musteri \n( \n\tID int, \n\tAd varchar(30), \n\tSoyad varchar(30), \n\tDogumYili int \n) \n\ninsert into Musteri values (1,'ERDIN\u00c7','\u00d6ZBAKIR',1987) \ninsert into Musteri values (2,'CAFER','YAL\u00c7IN',1990) \ninsert into Musteri values (3,'CEMIL','DEMIRTAS',1977) \ninsert into Musteri values (4,'ZEHRA','PARLAK',1981) \ninsert into Musteri values (5,'NECDET','SABIR',1984) \ninsert into Musteri values (6,'DURKAN','KELES',1987) \ninsert into Musteri values (7,'HALIL','HAYDAR',1970) \ninsert into Musteri values (8,'MURAT','\u00c7ELIK',1971) \ninsert into Musteri values (9,'SABRI','YAVUZ',1955) \ninsert into Musteri values (10,'SUAT','BEZIRCIOGLU',1949)\n\n<\/pre> \n\n<p>Yukaridaki sorgulari \u00e7alistirip gerekli tabloyu olusturdunuz ve datalari tabloya insert  ettiyseniz, sira store procedure olusturup istedigimiz scripti hazirlamaya. <\/p>\n\n<pre class=\"brush: sql;\">\nCREATE PROC [dbo].[spDinamikSiraliMusteri] \n( \n\t@DinamikKolonID INT \n) \nAS \nBEGIN \n\tSELECT * FROM Musteri \n\tORDER BY CASE \n\tWHEN @DinamikKolonID =1 THEN Ad \n\telse Soyad \nend \nEND \n\n<\/pre>\n<p>Yukaridaki stored procudure \u00e7alistirilirken parametre olarak 1 verilrse Ada g\u00f6re siralarken 1 disinda bir degerde Soyada g\u00f6re siralama yapacaktir. Simdi gelelim veri tipleri farkli kolonlari kullanmaya. Yukaridaki sorguda order kismini asagidaki gibi degistirin.<\/p>\n<pre class=\"brush: sql;\">\nORDER BY CASE \n\tWHEN @DinamikKolonID =1 THEN ID \n\tWHEN @DinamikKolonID =2 THEN Ad \n\tWHEN @DinamikKolonID =3 THEN Soyad \n\telse DogumYili \nend \n<\/pre>\n<p>Stored Procedure u yeniden olusturup 1, 2 ve 3 parametresi ile ayri ayri \u00e7alistirin. 2 ve 3 degerleri \u00e7alistirdiginiz zaman <strong>Conversion failed when converting the nvarchar value &#8216;Mr.&#8217; to data type int<\/strong> hatasi alacaksiniz. Bunu sebebi order i\u00e7in yazdigimiz case i\u00e7inde hem int hemde varchar kolonlari kullanmamizdir. Farkli tiplerde kolon kullanacaksak t\u00fcm kolonlari cast islemine tabi tutarak yukaridaki hatayi d\u00fczeltebiliriz. Yeni sorgumuz asagidaki gibi olamali<\/p>\n<a href='www.yazilimmutfagi.com'>.<\/a>\n\n<pre class=\"brush: sql;\">\nCREATE PROC [dbo].[spDinamikSiraliMusteri] \n( \n\t@DinamikKolonID INT \n) \nAS \nBEGIN \n\tSELECT * FROM Musteri \n\tORDER BY CASE \n\t\tWHEN @DinamikKolonID =1 THEN cast(ID as varchar) \n\t\tWHEN @DinamikKolonID =2 THEN cast(Ad as varchar) \n\t\tWHEN @DinamikKolonID =3 THEN cast(Soyad as varchar) \n\t\telse cast(Dogumyili as varchar) \n\tend \nEND\n\n<\/pre>\n<p>Procedure&#8217;u asagidaki gibi \u00e7agirabilirsiniz.<\/p>\n\n<pre class=\"brush: sql;\">\n \nexec [dbo].[spDinamikSiraliMusteri] 1 \nexec [dbo].[spDinamikSiraliMusteri] 2 \nexec [dbo].[spDinamikSiraliMusteri] 3 \nexec [dbo].[spDinamikSiraliMusteri] \n<\/pre>\n<a href='www.yazilimmutfagi.com'>.<\/a>","protected":false},"excerpt":{"rendered":"<p>Bazen yazdigimiz TSQL scriplerde datalari dinamik olarak siralama ihtiyaci duyariz. Yeni farkli durumlarda farkli kolonlara g&#246;re siralama (order by) yapmamiz gerekir. Bunu &#231;ogunuz farkli siralama yapan dinamik sorgularla &#231;&#246;zmeye &#231;alisir, halbuki order by kisminda case ifadesi i&#231;inde farkli durumlara g&#246;re farkli siralama kolonlari se&#231;ebiliriz. Bir stored procedur olusturalim ve g&#246;nderecegimiz parametreye g&#246;re farkli kolonlara g&#246;re siralama yapalim.<\/p>\n","protected":false},"author":517,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[422],"tags":[5676,4439,5183,5086,4336],"_links":{"self":[{"href":"https:\/\/www.yazilimmutfagi.com\/index.php\/wp-json\/wp\/v2\/posts\/146"}],"collection":[{"href":"https:\/\/www.yazilimmutfagi.com\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.yazilimmutfagi.com\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.yazilimmutfagi.com\/index.php\/wp-json\/wp\/v2\/users\/517"}],"replies":[{"embeddable":true,"href":"https:\/\/www.yazilimmutfagi.com\/index.php\/wp-json\/wp\/v2\/comments?post=146"}],"version-history":[{"count":0,"href":"https:\/\/www.yazilimmutfagi.com\/index.php\/wp-json\/wp\/v2\/posts\/146\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.yazilimmutfagi.com\/index.php\/wp-json\/wp\/v2\/media?parent=146"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.yazilimmutfagi.com\/index.php\/wp-json\/wp\/v2\/categories?post=146"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.yazilimmutfagi.com\/index.php\/wp-json\/wp\/v2\/tags?post=146"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}