Duyuruyu Kapat
Facebook Gözat
Twitter Gözat

Şartlı where

Konu, 'Veritabanları' kısmında omer tarafından paylaşıldı.

  1. omer

    omer Daimi Üye

    Kayıt:
    25 Haziran 2003
    Mesajlar:
    853
    Beğenilen Mesajlar:
    8
    Merhaba,

    Ms Sql'de bir functionum var fiyat bulmak için kullanıyorum.

    Aşağıdaki gibi veri var.
    KOD
    M.KOD
    RENK
    F.V1
    BOYUT
    F.V2
    FIYAT
    F.FIYAT
    APP5SSARI2000 TL
    APP5sGRİ2500 TL
    APP5SGRİ32GB2600 TL

    Function'a APP5S, GRİ, 32 GB diye veri gönderirsem veya APP5S, GRİ diye veri gönderirsem sorun yok. Fakat özel fiyat olmayan APP5S, GRİ, 16GB diye veri gönderirsem kayıt bulamıyor. Aslında benim istediğim olmayan bir değer gönderirsem APP5S, GRİ 'nin fiyatını alması.

    Yani aşağıdaki sql cümlesinde @V2'de değer varsa "AND ISNULL(F.V2,'')=@V2" şartını eklemesini yoksa eklememesini istiyorum nasıl yapabilirim? En performanslı şekilde çünkü binler kayıt dönerken ben bunu kullanıyorum her yerde.

    Kod:
    SELECT F.FIYAT
    FROM  FIYAT F  ON F.KOD=M.KOD AND ISNULL(F.V1,'')=@V1 AND ISNULL(F.V2,'')=@V2
    
     
  2. dinlex

    dinlex Üye

    Kayıt:
    23 Aralık 2016
    Mesajlar:
    235
    Beğenilen Mesajlar:
    60
    Şehir:
    Hatay
    Dünden beri yorum yapılmamış, benim de MsSql hakkında bilgim yok ama Mysql'de if() komutu kullanmışlığım var. mssql'de de olabilir bir araştırın isterseniz.

    Tam olarak kullanımı şöyle (where'den sonra kullanırsınız);
    if(şart , şart-sağlanırsa , şart-sağlanmazsa)

    örneğin; if ( F.KOD=M.KOD , F.KOD= 1 , F.KOD=2) yani F.KOD eşitse M.KOD'da, F.KOD=1 olanları çek, eşit değilse F.KOD =2 olanları çek. İnşallah vardır mssql'de.
     
  3. sedirAğacı

    sedirAğacı Daimi Üye

    Kayıt:
    2 Mart 2016
    Mesajlar:
    678
    Beğenilen Mesajlar:
    185
    Meslek:
    Bilgisayar programcısı.
    Şehir:
    Aydın
    V2 şartına IS NOT NULL koysan yeterli değilmi.
    SELECT F.FIYAT
    FROM FIYAT F ON F.KOD=M.KOD AND ISNULL(F.V1,'')=@V1 AND ISNULL(F.V2,'')=@V2
    yerine


    SELECT F.FIYAT
    FROM FIYAT F ON F.KOD=M.KOD AND ISNULL(F.V1,'')=@V1 AND F.V2 IS NOT NULL
    kk
    tabi sorgu sonucu birden fazla kayıt dönme ihtimalinin olup olmadığını 2 tablo ve key yapısını bilmediğimden bişey diyemiyorum
     
    Son düzenleme: 1 Şubat 2017
  4. skacurt

    skacurt Â

    Kayıt:
    4 Ocak 2008
    Mesajlar:
    4,340
    Beğenilen Mesajlar:
    21
    Meslek:
    Küfeci
    Şehir:
    İstanbul
    ISNULL(F.V2,'') = @V2 'ye ek olarak F.V2 Is Null olan kayıtları da seçip, Order By'da Case When kullanarak öncelik belirlemelisin. Öncelikleri F.V2 Is Null ise 2 değilse 1 döndürdükten sonra artan düzende (ASC) sıralayabilir, bu sonuçtan TOP (1) 'i seçebilirsin.
     
    sedirAğacı ve omer bunu beğendi.
  5. omer

    omer Daimi Üye

    Kayıt:
    25 Haziran 2003
    Mesajlar:
    853
    Beğenilen Mesajlar:
    8
    Arkadaşlar,

    IIF varmış ama mssql 2012'den sonra destekleniyormuş o yüzden kullanmadım. IF...ELSE kullanmadım şarta göre sql'i değiştirmek istemediğimden.

    Yönlendirmeniz üzerine aşağıdaki kod işimi gördü. Teşekkürler

    Kod:
    WHERE M.KOD=@KOD
    AND (ISNULL(F.V2,'')=@V2 OR ISNULL(F.V2,'')='')
    ORDER BY (CASE WHEN ISNULL(F.V2,'')='' THEN 2 ELSE 1 END) ASC