If..Else или Case в WHERE Clause - что-то другое - PullRequest
5 голосов
/ 30 июня 2011

Я прочитал множество вопросов и ответов здесь, но ни один из них не отвечает требованиям того, чего я пытаюсь достичь.Я даже не знаю, возможно ли это!Любая помощь / предложения будут с благодарностью.

Я пытаюсь построить условное предложение WHERE на основе

CustID (int) = @CustomerID 

Если @CustomerID = 0, тогда я хочу, чтобы результат был WHERE CustID > 0 (т.е. вернуть всех клиентов), в противном случае мне нужны только определенные клиенты CustID = @CustomerID

Возможно ли это?

Ответы [ 3 ]

15 голосов
/ 30 июня 2011

Просто сделай ГДЕ (@CustomerID = 0 ИЛИ CustID = @CustomerID)

6 голосов
/ 30 июня 2011

как то так?

SELECT * 
FROM YOURTABLE
WHERE 
( CASE 
     WHEN @CustomerID = 0 THEN CustID 
     ELSE 1 
  END
) > 0
AND 
( CASE 
     WHEN @CustomerID <> 0 THEN @CustomerID 
     ELSE CUSTID 
  END
) = CUSTID
0 голосов
/ 30 июня 2011

Наиболее распространенным способом моделирования оператора IF-ELSE в sql являются CASE и DECODE (по крайней мере, в oracle): Ex псевдокод:

if (x == 1) then y; else if (x == 2) then z; end if

CASE: select case x when 1 then y when 2 then z end example from dual;

ДЕКОД: select decode(x,1,y,2,z) example from dual;

...