Sql server 是否可以使用参数定义重叠过滤器集?

Sql server 是否可以使用参数定义重叠过滤器集?,sql-server,sql-server-2012,Sql Server,Sql Server 2012,我正在创建一个报表,希望能够使用单个参数过滤器返回不同(重叠)的数据集。我最初开始使用CASE语句,直到我意识到重叠的过滤器集对于CASE来说是有问题的 WHERE (@ACT_INCL_STATUS = CASE WHEN (DM_IAM_D_ACT_ROOT.DEFERRAL_CD IN ('01','02','') AND DM_IAM_D_ACT_ROOT.LCYCLE_CD IN ('01')) THEN 'CR' WHEN (DM_IA

我正在创建一个报表,希望能够使用单个参数过滤器返回不同(重叠)的数据集。我最初开始使用CASE语句,直到我意识到重叠的过滤器集对于CASE来说是有问题的

    WHERE
        (@ACT_INCL_STATUS = CASE WHEN (DM_IAM_D_ACT_ROOT.DEFERRAL_CD IN ('01','02','') AND DM_IAM_D_ACT_ROOT.LCYCLE_CD IN ('01')) THEN 'CR'
            WHEN (DM_IAM_D_ACT_ROOT.DEFERRAL_CD IN ('01','02','') AND DM_IAM_D_ACT_ROOT.LCYCLE_CD IN ('02','03','04','60','62','63')) THEN 'OP'
            WHEN (DM_IAM_D_ACT_ROOT.DEFERRAL_CD IN ('01','02','') AND DM_IAM_D_ACT_ROOT.LCYCLE_CD IN ('01','02','03','04','60','62','63')) THEN 'CROP'
            WHEN (DM_IAM_D_ACT_ROOT.DEFERRAL_CD NOT IN ('01','02') OR DM_IAM_D_ACT_ROOT.LCYCLE_CD IN ('06','07','08','09')) THEN 'CO'
            WHEN (DM_IAM_D_ACT_ROOT.LCYCLE_CD NOT IN ('01')) THEN 'OPCO'
            ELSE 'ALL' END)
我最近的工作使用了以下内容(计算出如果语句的任何部分计算为FALSE,整个条件都将被抛出),但它根本不返回任何行

想法

WHERE
        (@ACT_INCL_STATUS = 'CR' AND (DM_IAM_D_ACT_ROOT.DEFERRAL_CD IN ('01','02','') AND DM_IAM_D_ACT_ROOT.LCYCLE_CD IN ('01')))
        AND (@ACT_INCL_STATUS = 'OP' AND (DM_IAM_D_ACT_ROOT.DEFERRAL_CD IN ('01','02','') AND DM_IAM_D_ACT_ROOT.LCYCLE_CD IN ('02','03','04','60','62','63')))
        AND (@ACT_INCL_STATUS = 'CROP' AND (DM_IAM_D_ACT_ROOT.DEFERRAL_CD IN ('01','02','') AND DM_IAM_D_ACT_ROOT.LCYCLE_CD IN ('01','02','03','04','60','62','63')))
        AND (@ACT_INCL_STATUS = 'CO' AND (DM_IAM_D_ACT_ROOT.DEFERRAL_CD NOT IN ('01','02') OR DM_IAM_D_ACT_ROOT.LCYCLE_CD IN ('06','07','08','09')))
        AND (@ACT_INCL_STATUS = 'COOP' AND (DM_IAM_D_ACT_ROOT.LCYCLE_CD IN ('02','03','04','60','62','63','06','07','08','09')))

还有另一种方法——使用所谓的查找表。如果你有这样的表格

V    P1   P2
'CR' '01' '01' 
'CR' '02' '01' 

'OP' '01' '02' 
'OP' '01' '03' 
'OP' '01' '04' 
'OP' '01' '60' 
'OP' '01' '62' 
'OP' '01' '63' 
'OP' '02' '02' 
'OP' '02' '03' 
'OP' '02' '04' 
'OP' '02' '60' 
'OP' '02' '62' 
'OP' '02' '63' 
'OP'  ''  '02' 
'OP'  ''  '03' 
'OP'  ''  '04' 
'OP'  ''  '60' 
'OP'  ''  '62' 
'OP'  ''  '63' 
现在你可以加入这样的组织了

  SELECT COALESCE(Lookup.V,'ALL')
  FROM table
  LEFT JOIN lookup on lookup.p1 = DEFERRAL_CD and lookup.p2 = LCYCLE_CD

那不是应该是
还是
<代码>@ACT\u INCL\u STATUS='CR'和@ACT\u INCL\u STATUS='OP'
永远不能为真。。的确我真的很讨厌错过那些显而易见的事情。非常感谢你的帮助!