首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SQL Case语句:SQL Where Clause

SQL Case语句:SQL Where Clause
EN

Stack Overflow用户
提问于 2016-06-20 16:24:28
回答 2查看 92关注 0票数 0

我在“WHERE”子句中读过其他一些关于案例陈述的问答,但我无法真正理解如何使用它。我将在代码片段下面发布。我相信我不知道关于如何使用case语句的基本原则,这就是为什么代码不会编译/运行的原因。我很感谢你的帮助。

代码语言:javascript
复制
where i.status IN ('CR','L','O')
and i.FGCs > 0
and i.LastShpd > CAST(CONVERT(CHAR(11),DATEADD(DAY,-180,GETDATE()),113) AS datetime) 
and (Case
    When n.OnOrder IN ('0', '')
    Then i.OnOrder = 0 or i.LastShpd < CAST(CONVERT(CHAR(11),DATEADD(DAY,-21,GETDATE()),113) AS datetime)))
    End) 

i.LastShpd命令

为了解释上面的内容,我已经得到了适当的'SELECT‘和'FROM’语句。现在,我根据显示的变量(ecx LastShpd)过滤结果。我想让case语句做的是:当n.OnOrder =0时,我只想保留i.OnOrder = 0或i.LastShpd大于21天的行。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-06-20 16:31:26

我不认为你需要这样的理由

代码语言:javascript
复制
where i.status IN ('CR','L','O')
and i.FGCs > 0
and i.LastShpd > CAST(CONVERT(CHAR(11),DATEADD(DAY,-180,GETDATE()),113) AS datetime) 
and (
     (n.OnOrder IN ('0', '') and i.OnOrder = 0) 
 or i.LastShpd < CAST(CONVERT(CHAR(11),DATEADD(DAY,-21,GETDATE()),113) AS datetime)
    )

重读你的问题也许是另一种方式:

代码语言:javascript
复制
where i.status IN ('CR','L','O')
and i.FGCs > 0
and i.LastShpd > CAST(CONVERT(CHAR(11),DATEADD(DAY,-180,GETDATE()),113) AS datetime) 
and (
     n.OnOrder Not IN ('0', '') 
    or i.OnOrder = 0 
    or i.LastShpd < CAST(CONVERT(CHAR(11),DATEADD(DAY,-21,GETDATE()),113) AS datetime)
    )
票数 3
EN

Stack Overflow用户

发布于 2016-06-20 16:38:01

CASE子句中使用WHERE时,仍然需要定义操作的两边(即CASE条件= SOMETHING)。这可能会变得棘手,取决于您想要做什么,但是最简单的事情是让您的case语句执行为true/false类型的条件,这样就可以得到CASE =1或CASE = 0。

在你的情况下(意外双关!):

代码语言:javascript
复制
where i.status IN ('CR','L','O')
and i.FGCs > 0
and i.LastShpd > CAST(CONVERT(CHAR(11),DATEADD(DAY,-180,GETDATE()),113) AS datetime) 
and (Case
    When n.OnOrder IN ('0', '') AND (i.OnOrder = 0 or i.LastShpd < CAST(CONVERT(CHAR(11),DATEADD(DAY,-21,GETDATE()),113) AS datetime)) 
    THEN 1
    ELSE 0
    End) = 1

当然,正如另一个答案所指出的那样,在这种情况下,案件并不是真正必要的。然而,如果您有更复杂的条件,这可能是有帮助的。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37927410

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档