0

次のスクリプトにスイッチを追加しようとしています。
その場合、?内または内@IgnoreExclusions = 1の値を除外したくないですか?Controltb_AssocAccounts_ExcludedSurnameDOBControltb_AssocAccounts_ExcludedDOB

私は自分の試みの1つを含めましたが、これはあまり読みやすいとは思いませんNULL。また、除外リストの1つにある値のように、確実に機能するかどうかもわかりません。

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;
4

1 に答える 1

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;
于 2013-03-12T18:08:11.107 に答える