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

时间:2016-09-08 09:00:17

标签: sql-server tsql

我试图创建一个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

正如您所看到的那样,它不会起作用,因为CASETHEN

之后的条件不能很好地工作

一个解决方案,我的一个朋友想出来的,就是那个

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中是否可以这样做。

由于

2 个答案:

答案 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