• Sql Case when Kullanımı

    Sql de zaman zaman c#,visual basic dillerinde kullandığımız if else komutlarını kullanmak isteyebiliriz.
    Ben bu zamana kadar pek karşılaşmamıştım aslında ama bugün birlikte çalıştığım takımda bi arkadaşım sorguları arasına böyle bir kısım eklemiş benimde ilgimi çekti bir kaç küçük araştırmadan sonra birşeyler yazayım dedim :)

    Araştırma yaptığımda herkez cinsiyet örneğini vermiş.Bana Biraz basit geldi ama öncelikle işin abc si olarak ona benzer bir sorgu yazayım . . .:)

    Kitap Tablomuzdaki ,kitap durumu alanı "NULL,1 VE 0" değerlerini alabiliyor olsun.


    SELECT ID,KitapAdi,CASE WHEN KitapDurum = '0' THEN 'Kitap_Kirada'
    WHEN KitapDurum = '1' THEN 'Kitap_Mevcut'
    ELSE 'Kitap_Henuz_Kütüphanemize_Ulasmadi' END
    FROM Kitap

    burada eğer 0 değeri atanmış ise kitap yoktur 'Kitap_Kirada' mesajını gösteriyoruz,1 değeri atanmış ise 'Kitap_Mevcut',Eğer Farklı bir değer ise bununda Null olduğunu düşünüyüruz ve Kitabın sadece kendi kaydının girildiği henüz kütüphaneye ulaştı bilgisinin atanmadığını düşünerek 'Kitap_Henuz_Kütüphanemize_Ulasmadi' mesajını veriyoruz.

    Bunu gerçek hayatta kritik olarak, örneğin şöyle bir sorguda kullanabilirsiniz:

    Şöyle bir tablomuz olsun:
    'CREATE TABLE [dbo].[StokHareketleri](
    [ID] [int] IDENTITY(1,1) NOT NULL ,
    [StokHareketTip] [smallint] NULL,--0.Stok Giriş,1.Stok Çıkış
    [StokKodu] [nvarchar](50) NULL,
    [StokHareketMiktari] [int] NULL,
    CONSTRAINT [PK_StokHareketleri] PRIMARY KEY CLUSTERED
    (
    [ID] ASC
    )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
    ) ON [PRIMARY]
    '
    Yukarıdaki sorguyu aynen çalıştırarak tabloyu oluşturabilirsiniz

    Burada amacımız Stok hareketleri tablosundan toplam stok miktarını almak olsun .Yani Stok Girişi ve çıkışı bu tabloda tutuluyor.Biz yapılan girişlerden çıkış miktarını çıkarıcaz ve elimizde kalan stok miktarını öğrenicez.

    SELECT st1.StokKodu,
    ISNULL((SELECT
    ISNULL(SUM(CASE WHEN StokHareketTip = 0 THEN StokHareketMiktari END),0)-
    ISNULL(SUM(CASE WHEN StokHareketTip = 1 THEN StokHareketMiktari END),0)
    FROM StokHareketleri AS st2 WHERE st1.StokKodu = st2.StokKodu),0)AS StokMiktarı
    FROM StokHareketleri AS st1

    Yukarıda Stok hareket tipi giriş olan stok miktarının toplamından ,çıkış olan stok miktarının toplamını çıkar şeklinde bir sorgu yazdık ve sonuç olarak Urun Kodu ve o Ürün için Stok Miktarını elde ettik.

    Ayrıca Sorguda "ISNULL" kelimesininde kullanıldığını görüyoruz.
    örnek : ISNULL(DEGER,0) ->Bunun anlamı eğer "DEGER" alanı "null" gelir ise null yerine "0" yaz demek oluyor.

    umarım faydalı olmuştur.
  • You might also like