Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/81.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql If..Else或WHERE子句中的Case-不同的东西_Sql_If Statement_Conditional_Case_Where - Fatal编程技术网

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:-)谢谢-其他答案提供了一个可行的解决方案。我感谢你花时间回复!