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.
ROW_NUMBER () fonksiyonuROW_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 ServerListemdeki 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() functionDENSE_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() functionNTILE 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. |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||

