将Switch添加到WHERE子句

时间:2013-03-12 17:59:26

标签: sql

我一直在尝试在以下脚本中添加一个开关 如果@IgnoreExclusions = 1,我不想排除Controltb_AssocAccounts_ExcludedSurnameDOBControltb_AssocAccounts_ExcludedDOB中的任何值?

我已经包含了我的一个尝试,但我不认为这是非常可读的,而且我不确定它是否可靠,因为NULL可能是其中一个排除列表中的值。

DECLARE @IgnoreExclusions TINYINT = 1;

SELECT  ua.UserAccountKey,          
FROM    #Accounts x 
        INNER JOIN WH.dbo.vw_DimUserAccount ua      
         ON 
         ( --surname and DOB need to match
         x.Surname = ua.Surname AND 
         x.DOB = ua.DOB
         ) 
         AND  
         x.UserAccountKey <> ua.UserAccountKey
WHERE   EXISTS  
          (
          SELECT x.Surname, x.DOB
          EXCEPT
          SELECT ExcludedSurname,ExcludedDOB 
          FROM   WH.dbo.Controltb_AssocAccounts_ExcludedSurnameDOB
          )
        AND
        EXISTS
          (
          SELECT x.DOB
              --SELECT CASE WHEN @IgnoreExclusions = 1 THEN NULL ELSE x.DOB END --<<<<ATTEMPT
          EXCEPT 
          SELECT ExcludedDOB 
          FROM   WH.dbo.Controltb_AssocAccounts_ExcludedDOB
        )   
GROUP BY    ua.UserAccountKey;

1 个答案:

答案 0 :(得分:2)

我不确定您使用的SQL的哪种变体,但是不能使用简单的OR子句来处理这个技巧?

DECLARE @IgnoreExclusions TINYINT = 1;

SELECT  ua.UserAccountKey,          
FROM    #Accounts x 
    INNER JOIN WH.dbo.vw_DimUserAccount ua      
        ON x.Surname = ua.Surname
            AND x.DOB = ua.DOB
            AND x.UserAccountKey <> ua.UserAccountKey
WHERE EXISTS  
    (
        SELECT x.Surname, x.DOB
        EXCEPT
        SELECT ExcludedSurname,ExcludedDOB 
        FROM   WH.dbo.Controltb_AssocAccounts_ExcludedSurnameDOB
    )
    AND 
    (
        @IgnoreExclusions = 1 OR EXISTS
        (
              SELECT x.DOB
              EXCEPT 
              SELECT ExcludedDOB 
              FROM   WH.dbo.Controltb_AssocAccounts_ExcludedDOB
        )
    )
GROUP BY ua.UserAccountKey;
相关问题