我试图创建一个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
正如您所看到的那样,它不会起作用,因为CASE
在THEN
一个解决方案,我的一个朋友想出来的,就是那个
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)
然而,考虑到这一点,逻辑将是@Restriction等于1,然后设置条件CFE_EDI.ETAT = 'ENV' OR CFE_EDI.ETAT = 'OUV'
并且我朋友提出的解决方案不会那样做。
我知道可以在Crystal Reports中完成,但我不确定在SQLServer中是否可以这样做。
由于
答案 0 :(得分:1)
您的朋友解决方案已经适用于您的方案,但我不知道您为什么说它不起作用。您可以试试这个,但它与您的朋友解决方案类似。
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 :(得分:1)
是的,您可以在条件
的情况下使用案例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