none
Sql where içinde case kullanılabilinir mi? RRS feed

  • Soru

  • Merhaba

     Onay durumu diye bir dropdown var. Farklı bir mantık var burda. Eleman ve değerleri söyle:

     Seçiniz - 2

    Onay Bekliyor -1

     Onay  1

    Red 0

     0 burda boş bir değere değil rede karşılık geliyor . Onay durumu null sa bu da onay beklyora karşılık geliyor.

    Filitreleme yaparkan  null sa buna göre filitremele yapmamalıyım , -1 se null olanları getirmeliyim. -2 gönderdiğimde nullif kullanarak filltreleme yaptırmıyorum. Ama Onay bekliyorları yani null olanları getiremiyorum. 

    case t.TeklifOnaylandimi 
    when '1' then '1' when '0' then '0' else '-1' end as OnayDurumID şeklinde bir case yazdım. OnayDurumuID 1 se 1 0 sa 0, ikiside değilse -1 yazdırıyorum. Buna göre filitreleme yapılabilir mi? Yani where OnayDurumID=1 gibi bir şey yapılabilir mi?

    Şu şekilde yazdım ama olmadı. Sol tarafta -1 se null olanları getirir diye düşünmüştüm.

    and (t.TeklifOnaylandimi= NULLIF(@oid,-1) or NULLIF(@oid,-2) is null)

    22 Aralık 2016 Perşembe 11:24

Tüm Yanıtlar

  • Gerekmeyen yerlerde de NULL kullanmak sadece karmasayi arttirir.

    Where'de case when kullanabilirsin, hatta icice de case when kullanabilirsin, ne demek istedigini net anlamadim ama sanki bunu tarif ediyorsun:

    WHERE @comboOnay = -2 OR
    (@comboOnay = -1 AND t.TeklifOnaylandimi IS NULL) OR
    (t.TeklifOnaylandimi = @comboOnay )

     

    22 Aralık 2016 Perşembe 12:10
  • -2 gönderince t.TeklifOnaylandimi ya göre filtreleme yapmasın(bu kısımda sorun yok), -1 gönderince  t.TeklifOnaylandimi null olanları getirsin istiyorum.

    and (t.TeklifOnaylandimi= @oid or NULLIF(@oid,-2) is null)

    22 Aralık 2016 Perşembe 12:15
  • -2 gönderince t.TeklifOnaylandimi ya göre filtreleme yapmasın(bu kısımda sorun yok), -1 gönderince  t.TeklifOnaylandimi null olanları getirsin istiyorum.

    Iyi de hala benim yazdigimdan farkli ne istedigini anlayamadim. En iyisi ornek veri vermen, sunun gibi:

    Id, TeklifOnaylandimi
    1, 1
    2, 0
    3, Null

    Benim yazdigima gore,
    combodan -2 gelirse (1,2,3)
    combodan -1 gelirse (3)
    combodan 1 gelirse (1)
    combodan 0 gelirse (2)

    seciliyor. 

    22 Aralık 2016 Perşembe 13:13
  • Bu şekilde istediğim oldu.

    and (t.TeklifOnaylandimi= @oid  or (@oid =-1 and t.TeklifOnaylandimi IS NULL) or NULLIF(@oid,-2) is null )

    22 Aralık 2016 Perşembe 13:36
  • Buna gerek yok ki, daha basit ve anlasilir seklini vermistim zaten. Bu da olur da, kulagini tersten gostermek gibi olmus + optimizasyon acisindan pek efektif degil.
    22 Aralık 2016 Perşembe 13:40