Google Mobile Ads

Sunday, January 29, 2012

SQL'de ORDER BY üzerinde CASE WHEN ile özel sıralamalar yapmak

ORDER BY kullanırken, bazen ASC(ascending order) ve DESC(descending order) gibi mevcut sıralama yöntemlerinin yetersiz kaldığı durumlar olabilir. Sıralama işlemi esnasında, mevcut alfabetik sıralamanın yanısıra istisnai özel durumlarında kullanılması gerekebilir. Örneğin, illeri A'dan Z' ye sıralarken, bizden İstanbul, Ankara ve İzmir'in listenin en üstünde olması istenebilir. Bu durumda kullanmamız gereken yöntem, ORDER BY CASE'dir.


SELECT   IL_ADI
FROM     ILLER_TABLOSU
ORDER BY CASE IL_ADI
            WHEN 'İSTANBUL' THEN 1
            WHEN 'ANKARA'   THEN 2
            WHEN 'İZMİR'    THEN 3
            ELSE  4
         END







Sıralama da İstanbul, Ankara, İzmir ilk 3 sırada ve koda göre diğer iller de 4. sırada olacaktır. Fakat bu durumda diğer iller sıralanmadan gelişi güzel gelmektedir. Bu şekilde bir sıralama hiçbir işimize yaramaz sanırım. Bu sebeple koda ufak bir ekleme yapmak gerekiyor.


SELECT   IL_ADI
FROM     ILLER_TABLOSU
ORDER BY CASE IL_ADI
            WHEN 'İSTANBUL' THEN 1
            WHEN 'ANKARA'   THEN 2
            WHEN 'İZMİR'    THEN 3
            ELSE  4
         END,
         IL_ADI ASC

Bu şekilde geri kalan illerinde A'dan Z'ye sıralanmasını sağlayabiliriz.


ORDER BY üzerinde CASE'in diğer bir kullanım şekli ise sıralamaya baz alınacak kolonun seçeneğe bağlı hale getirilmesidir.


DECLARE @Secenek int
SET @Secenek = 3

SELECT Ad, Soyad, DogumYeri 
FROM   Kisiler
ORDER BY  CASE
            WHEN @Secenek = 1 THEN Ad
            WHEN @Secenek = 2 THEN Soyad
             WHEN @Secenek = 3 THEN DogumYeri
         END


@Secenek değişkeninin 3 olması durumunda DogumYeri kolonu A'dan Z'ye sıralanacaktır.






Using ORDER BY CASE to make custom sort in SQL

4 comments:

  1. Merhaba asp içinde bu şekilde kullanamıyorum. Hata veriyor. Yardımcı olabilir misiniz?

    ReplyDelete
  2. Merhaba,
    Bu sql de yazılmış bir kod. Bu sebeple aynı kodu, @secenek değerini parametre olarak alan bir function içine alıp, asp'den function a parametre göndererek çalıştırmanızı tavsiye ederim.

    ReplyDelete
  3. Merhaba hocam,
    Seçenekli olan değil ilk yaptığınız örneği de çalıştıramadım. İlk yaptığınız örneği nasıl kullanabilirim.

    ReplyDelete
    Replies
    1. SQL'i ASP içinde kullanış şeklinizi görebilirsem size daha iyi yardımcı olabilirim.

      Delete

LinkWithin

Related Posts Plugin for WordPress, Blogger...