Sql oparty na warunku dynamicznym gdzie

1

Mam zapytanie, w tym jest wiele warunków opartych na parametrze

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

Podaje niepoprawną składnię przy wielkości liter w wierszu

Uprzejmie zasugeruj mi jakiekolwiek inne rozwiązanie, aby zmienić „gdzie warunek” w zależności od wartości parametru

ponieważ w danym sql warunek „where” zależy od wartości parametru p.

Możesz zobaczyć w podanej składni, jeśli wartością parametru jest zmiana, warunek również zostanie zmieniony.

W pierwszym przypadku, jeśli p = „Zamknięty”, to select ... where q-isnull(r,0)=0

jeśli p = „Oczekuje”, to select ... where (q - isnull(r,0) )>0

W pierwszym stanie porównuje warunek „równy” , aw następnym przykładzie jest „większy od” wartości zerowej.

jak w trzecim warunku chcę wyświetlić wszystkie rekordy.

Problem polega na tym, że struktura „case” zwraca tylko wartość, a nie wyrażenie.

ciekawy K.
źródło

Odpowiedzi:

0

Jeśli chcesz ocenić wiele kryteriów w swoim oświadczeniu, to wszystko, co musisz zrobić, to przesunąć je wszystkie przed THEN i zwrócić wartość wskazującą, że pomyślnie przejdzie kontrolę.

W przypadku kodu można to zrobić w następujący sposób:

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

Chociaż twoja składnia nie działa z SQL Server (nie jestem pewien, jakiej bazy danych szukasz). Działająca wersja w SQL Server to:

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
Nayrb
źródło
Istnieje wiele warunków zależnych od parametru. W tym przykładzie 3 różne warunki, tj. Równe lub większe niż lub prawdziwe (1 = 1 ..... Poproszono o jedno pełne zapytanie dla wszystkich powyższych kryteriów
ciekawy K
Zredagowałem moją odpowiedź, aby rozwiązać wszystkie Twoje problemy. Przepraszam za to
Nayrb,
Wielkie dzięki, testowanie na Sql Server 2008 R2. Działa ostatnia składnia
ciekawy K