SQL Server 2005 de Sıralama Fonksiyonlarının Kullanımı

20 Kasım 2008 – 01:43

 

SQL Server 2005 Transact-SQL sonuç kümende sıralama yapmanı sağlayacak  fonksiyonlar içerir. Bu fonksiyonlardan bir veya daha fazlasını sorgunuzun SELECT cümleciğine eklediğinizde, kullandığınız fonksiyona göre  her satır için bir sıralama atamış olursunuz.

T-SQL şimdilik 4 tane sıralama fonksiyonu içerir : ROW_NUMBER, RANK, DENSE_RANK ve NTILE. Şimdi kısaca bu fonksiyonların tanımı yapacak ve nasıl çalıştıklarını göstereceğim.

Sıralama Fonksiyonlarının  Genel  Yazımı:

ROW_NUMBER ( ) ,RANK(),DENSE_RANK(),NTILE()    OVER ( [ <partition_by_clause> ] <order_by_clause> )

 

<partition_by_clause>

FROM cümleciği tarafından üretilen sonuç kümelerinde, sıralama fonksiyonunun uygulanacağı bölümleri  belirler.

<order_by_clause>

ORDER BY bir bölüm içindeki sıralamanın hangi sütuna göre yapılacağını belirler.

 

DECLARE @Tablo Table

(ID int identity,  SoyAd varchar(100),SatisPayi int,Ay varchar(30),Yil int)

 

insert into @Tablo values(‘A’,280000,‘Ocak’,2002)

insert into @Tablo values(‘B’,280000,‘Ocak’,2004)

insert into @Tablo values(‘A’,267000,‘Nisan’,2002)

insert into @Tablo values(‘B’,266000,‘Ocak’,2002)

insert into @Tablo values(‘C’,264000,‘Ocak’,2002)

insert into @Tablo values(‘D’,263000,‘Haziran’,2003)

insert into @Tablo values(‘E’,247000,‘Nisan’,2003)

insert into @Tablo values(‘B’,244000,‘Haziran’,2001)

insert into @Tablo values(‘B’,239000,‘Ocak’,2003)

insert into @Tablo values(‘B’,244000,‘Haziran’,2001)

insert into @Tablo values(‘A’,234000,‘Ocak’,2004)

insert into @Tablo values(‘C’,226000,‘Aralýk’,2002)

insert into @Tablo values(‘A’,226000,‘Haziran’,2001)

insert into @Tablo values(‘C’,224000,‘Nisan’,2003)

insert into @Tablo values(‘F’,217000,‘Ocak’,2003)

insert into @Tablo values(‘C’,210000,‘Haziran’,2002)

 

 

 

SELECT

ROW_NUMBER() OVER(ORDER BY SatisPayi DESC) AS [RowNumber],

RANK() OVER(ORDER BY SatisPayi DESC) AS [Rank],

DENSE_RANK() OVER(ORDER BY SatisPayi DESC) AS [DenseRank],

NTILE(5) OVER(ORDER BY SatisPayi DESC) AS [NTile],

SoyAd, SatisPayi, Ay, Yil

FROM @Tablo

 

Örneğimizideki Select deyiminde 4 sıralama fonksiyonunu kullanmakta.Bütün fonksiyonları tek deyimin içine dahil ettim.Böylece her fonksiyonun döndürdüğü sonucu karşılaştırabilirsiniz.

 

 

 

 

 

 

 

 

[RowNumber]

pan style="color: black">[Rank]

[DenseRank]

[NTile]

SoyAd

SatisPayi

Ay

Yil

1

1

1

1

C

264000

Ocak

2002

2

1

1

1

C

226000

Aralık

2002

3

1

1

1

C

224000

Nisan

2003

4

4

2

2

F

217000

Ocak

2003

5

5

3

2

B

280000

Ocak

2004

6

5

3

2

B

266000

Ocak

2002

7

5

3

3

B

244000

Haziran

2001

8

5

3

3

B

239000

Ocak

2003

9

5

3

3

B

244000

Haziran

2001

10

10

4

4

E

247000

Nisan

2003

11

11

5

4

D

263000

Haziran

2003

12

12

6

4

A

226000

Haziran

2001

13

12

6

5

A

234000

Ocak

2004

14

12

6

5

A

280000

Ocak

2002

15

12

6

5

A

267000

Nisan

2002

 

ROW_NUMBER () fonksiyonu

ROW_NUMBER()  fonksiyonu sıralama fonksiyonlarının en kolayıdır. Sizinde sonuç kümesinden görebildiğiniz gibi satırın numarasıdır. Bir satırın bir sonuç kümesinin bir bölümündeki ardışık numarasını döndürür. Her bölüm için ilk satır 1 ile başlar.  Ben bu örnekte SatisPayi sütununa göre sıralama yapıyorum(azalan sırada). Dönen sonuç kümesinde sonuçlar en yüksek SatisPayindan başlıyor.

RANK()  function in SQL Server

Listemdeki diğer sıralama fonksiyonu RANK(). Rank fonksiyonunu kullanıldığı zaman sıralama yaptığın sütundaki aynı değerler aynı sıralama numarasını alacaktır. Fakat sıralama değeri sonuç kümesindeki satırın pozisyonunu baz alır. Örneğin,Üçüncü sıradaki SatisPayi  267,000 en yüksek ikinci değer. Fakat 2.sıra yerine 3 üncü sıraya düşmektedir. RANK fonksiyonu 2 yi atladı çünkü ikinci satır birinci satırla eşleşiyordu. Eğer 4 üncü satırda 3.üncü satırla aynı değeri paylaşsa idi 3 ile sıralanacaktı.

 
   
 

DENSE_RANK()  function

DENSE_RANK  function da, RANK function gibi aynı değerli  sütunlar aynı sıralama değerini alırlar ama ardışık olarak artar. Sonuç kümesinde de görüldüğü gibi 3. Satır 2 sıralama numarasını almıştır çünkü 2. en yüksek SatişPayina sahiptir.

 ROW_NUMBER, RANK ve DENSE_RANK fonksiyonları sonuçları döndürüş türüne göre benzerdir. Fark numaralandırmanın sıralı olup olmadığında ve satıra bağlı olup olmadığındadır. NTILE fonksiyonu üç fonksiyondan farklıdır.

NTILE()  function

NTILE fonksiyonunu kullandığında parametre olarak bir integer vermelisin. NTILE sonuç kümesini verilen parametreye göre böler. Örneğineğimizde parametre olarak 5 verdim. Bu demek ki sonuç 5 grupa bölünecek. 15 satır olduğu için her grup 3 satır içerecek. Gruplar Satis Payina göre değer alacak. En yüksek satis payina sahip 3 satır 1 değerini diğer en yüksek Satis payi 2 değerini alır. Çünkü 5 grup var.

Sizinde gördüğünüz gibi, SQL Serverdaki sıralama fonksiyonları gayet açık. Genelde Matrix raporlarda satır numarası kullanırken çok işime yarıyor.   

Bookmark and Share

Post a Comment

Subscribe without commenting