我正在尝试创建一个WHERE子句,如果变量满足特定要求,该子句将触发特定条件
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不能很好地工作
我的一个朋友提出的一种解决方案是
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中做到这一点。
谢谢
发布于 2016-09-08 17:11:58
你的朋友解决方案已经在你的场景中起作用了,但我不明白为什么你要告诉它不起作用。您可以尝试此方法,但它与您的朋友解决方案类似。
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))发布于 2016-09-08 17:16:24
可以,您可以在where条件中使用case
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 = 1https://stackoverflow.com/questions/39386711
复制相似问题