首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >sqlserver -如果变量满足要求,它将触发特定条件

sqlserver -如果变量满足要求,它将触发特定条件
EN

Stack Overflow用户
提问于 2016-09-08 17:00:17
回答 2查看 28关注 0票数 0

我正在尝试创建一个WHERE子句,如果变量满足特定要求,该子句将触发特定条件

代码语言:javascript
复制
 WHERE 
     CASE 
      WHEN @Restriction = '1' THEN CFE_EDI.ETAT = 'ENV' OR CFE_EDI.ETAT = 'OUV'
      WHEN @Restriction = '0' THEN CFE_EDI.ETAT <> 'ENV' AND CFE_EDI.ETAT <> 'OUV'
      ELSE CFE_EDI.ETAT != '' AND CFE_EDI.CODE_INSEE IS NOT NULL 
     END

正如您所看到的,它不会工作,因为在THEN之后有条件时,CASE不能很好地工作

我的一个朋友提出的一种解决方案是

代码语言:javascript
复制
WHERE (@restriction = 1 AND CFE_EDI.ETAT IN ('ENV', 'OUV'))
OR (@restriction = 0 AND CFE_EDI.ETAT.ETAT NOT IN ('ENV', 'OUV'))
OR (CFE.EDI.ETAT <> '' AND CFE_EDI.CODE_INSEE IS NOT NULL)       

然而,考虑一下,逻辑是,如果@ CFE_EDI.ETAT = 'ENV' OR CFE_EDI.ETAT = 'OUV'等于1,那么将条件限制放在限制上,而我朋友提出的解决方案不会这样做。

我知道在Crystal Reports中可以做到这一点,但我不确定是否有办法在SQLServer中做到这一点。

谢谢

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-09-08 17:11:58

你的朋友解决方案已经在你的场景中起作用了,但我不明白为什么你要告诉它不起作用。您可以尝试此方法,但它与您的朋友解决方案类似。

代码语言:javascript
复制
WHERE ((@restriction = 1    AND (CFE_EDI.ETAT='ENV' OR CFE_EDI.ETAT='OUV'))
         OR (@restriction = 0   AND (CFE_EDI.ETAT<>'ENV' AND CFE_EDI.ETAT<>'OUV'))
         OR (CFE.EDI.ETAT <> '' AND CFE_EDI.CODE_INSEE IS NOT NULL))
票数 1
EN

Stack Overflow用户

发布于 2016-09-08 17:16:24

可以,您可以在where条件中使用case

代码语言:javascript
复制
WHERE 
    CASE 
        WHEN @Restriction = '1' AND CFE_EDI.ETAT IN ('ENV', 'OUV') THEN 1
        WHEN @Restriction = '0' AND CFE_EDI.ETAT NOT IN ('ENV', 'OUV') THEN 1
        WHEN CFE_EDI.ETAT <> '' AND CFE_EDI.CODE_INSEE IS NOT NULL THEN 1
        ELSE 0
    END = 1
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39386711

复制
相关文章

相似问题

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