Sql If..Else或WHERE子句中的Case-不同的东西
我在这里读了大量的问答,但没有一个能满足我的目标。 我甚至不知道这是否可能!如有任何帮助/建议,将不胜感激 我正试图基于Sql If..Else或WHERE子句中的Case-不同的东西,sql,if-statement,conditional,case,where,Sql,If Statement,Conditional,Case,Where,我在这里读了大量的问答,但没有一个能满足我的目标。 我甚至不知道这是否可能!如有任何帮助/建议,将不胜感激 我正试图基于 CustID (int) = @CustomerID 如果@CustomerID=0,则我希望结果为其中CustID>0(即返回所有客户),否则我只希望某些客户CustID=@CustomerID 这可能吗?就这么做吧 其中(@CustomerID=0或CustID=@CustomerID)类似的内容 SELECT * FROM YOURTABLE WHERE ( C
CustID (int) = @CustomerID
如果@CustomerID=0
,则我希望结果为其中CustID>0
(即返回所有客户),否则我只希望某些客户CustID=@CustomerID
这可能吗?就这么做吧
其中(@CustomerID=0或CustID=@CustomerID)类似的内容
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
选择*
从你的桌子上
哪里
(案例
当@CustomerID=0时,则为CustID
其他1
结束
) > 0
及
(案例
当@CustomerID为0时,则@CustomerID
艾尔斯库斯蒂德
结束
)=客户ID
在sql中模拟IF-ELSE语句最常用的方法是大小写和解码(至少在oracle中):
伪代码:
如果(x==1)那么y;如果(x==2),则为z;如果结束
案例:
选择
案例十
当1时,则为y
当2时,然后是z
结束示例
来自双重代码>
解码:
从dual中选择解码(x,1,y,2,z)示例
@Rich如果您只想返回全部或仅返回1,@antlersoft答案是最好的答案,dindt请参阅“(即返回所有客户)”,在您的问题中,我必须这样做,因为“CustID>0”条款先生。-您是一个绝对的传奇。在我决定寻求帮助之前,这已经困扰了我好几个小时:)这也许应该是一个单独的帖子,但它是相关的,希望你还在。我根据你的建议修改了我的SP,效果不错。我有另一个SP,它基本上做相同的事情,但也允许基于@FilterExpression进行过滤,因此(抱歉,不知道如何将其作为代码发布):JobNumber(如“%”++@FilterExpression++“%”)或OrderNumber(如“%”++@FilterExpression++“%”或[Description]像“%”++@FilterExpression++“%”或者像“%”++@FilterExpression++“%”这样的客户端,您建议我如何将其合并到整个@Customer子句中(即是否作为客户过滤)?谢谢您的奉承,您可以这样做,这里的诀窍是始终使您的条件为真,类似这样的事情。其中(作业编号,如“%”+@FilterExpression++“%”或@FilterExpression为空)和。。。。那么…,你是说这个吗?不完全是,先生,但我已经根据托尼和安特尔索夫的回答实现了我所需要的。我真的很感谢你的帮助!遗憾的是,我不能把两个答案都标对,因为它们都有效:-(感谢antlersoft的快速响应,但我需要返回@CustomerID所在的所有客户。)=0@Rich-当参数为零时,给定的子句将返回所有客户。如果子句@CustomerID=0
的第一部分计算结果为true,则忽略第二部分并匹配所有行(注意,条件测试的是变量,而不是表字段)。如果变量不为零,则第一部分为false,并且CustID
字段必须与变量匹配。啊,我明白你的意思。我刚刚尝试了这个方法,它起了作用(对不起,听起来不应该很惊讶lol).你对我对先生的其他评论有什么想法吗?事实上,我自己考虑了一会儿,我已经把这个问题整理好了。很高兴把4个SP减到1:-)谢谢-其他答案提供了一个可行的解决方案。我感谢你花时间回复!