Sql dinamik nerede koşulu dayalı


1

Bir sorgu var, bunda parametreye dayanan birden fazla koşul var.

select a,b,c,d from xyz where case p='Closed' then (q-r)=0 case p='Pending' then (q - isnull(r,0) )>0 case P='All' then all records to be display

Satır durumunun yanında Yanlış Sözdizimi veriyor

Lütfen bana değişecek başka bir çözüm öner 'nerede şart' parametre değerine bağlı olarak,

sql verilen beri, 'nerede' koşul p parametresine bağlıdır.

Belirtilen sözdiziminde görebilirsiniz, eğer parametre değeri değişirse, durum da değişmiş olur.

İlk durumda eğer p = 'Kapalı' o zaman select ... where q-isnull(r,0)=0

p = 'Beklemede' ise select ... where (q - isnull(r,0) )>0

İlk durumda karşılaştırarak 'eşittir' koşulu & amp; sonraki örnekte 'dan büyük' sıfır değer

üçüncü durumda olduğu gibi tüm kayıtları görüntülemek istiyorum.

Burada sorun şudur: 'case' yapısı yalnızca ifadeyle değil bir değerle döner.

Yanıtlar:


0

Vaka ifadenizde birden fazla kriterin değerlendirilmesini istiyorsanız, yapmanız gereken tek şey hepsini THEN'den önce kaydırmak ve çeke geçtiğini belirten bir değer döndürmektir.

Kodunuz için bu şekilde yapılabilir:

select a,b,c,d from xyz where 1 =
case p='Closed' and (q-r)=0 then 1
case p='Pending' and (q - isnull(r,0) )>0 then 1
case P='All' then 1

Sözdiziminiz SQL Server ile çalışmıyor olsa da (hangi veritabanını sorguladığınızdan emin değilim). SQL Server'da çalışan bir sürüm:

select a,b,c,d from xyz where 1 =
CASE 
    WHEN p='Closed' AND (q-r)=0 THEN 1
    WHEN p='Pending' AND (q - isnull(r,0) )>0 THEN 1
    WHEN P='All' THEN 1
    ELSE 0 
END

Parametreye dayanan çoklu koşullar vardır. Bu örnekte 3 farklı koşul, yani eşit veya ondan büyük veya gerçek (1 = 1 ..... Yukarıdaki tüm kriterler için bir tam sorgu istendi
curious K

Tüm sorunlarınızı gidermek için cevabımı düzenledim. Bunun için üzgünüm
Nayrb

Sql Server 2008 r2 üzerinde test çok teşekkürler. Son sözdizimi çalıştı
curious K
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.