SQL-从源表中提取某些记录,但也交叉引用该表

时间:2018-11-20 22:36:25

标签: sql sql-server tsql

我有一个用例,我不确定是否可以利用SQL语法获得所需的结果。我的SQL大约是6/10(中级)。任何指导将不胜感激!我在下面有我的源表。

enter image description here

然后,我有了所需的“目标表”:

enter image description here

我要做的只是从源表ProductBusinessKey = 'CBC'中提取记录,而且还要交叉检查该特定的“ AccountID”是否在源表ProductBusinessKey = 'HIS'中有记录。如果找到记录,则将目标表中的“ HasHIS”列标记为TRUE。否则,请标记为FALSE

这就是我被困住的地方。我只是不确定是否需要做一个精美的CASE语句,或者需要进行排名/分区。有什么想法吗?

到目前为止,我已经尝试过以下操作,但是显然不起作用-它也引入了HIS记录:

select 
    a.Account,
    b.InstrumentID,
    b.Product,
    b.OriginationDate,
    a.EmailAddress,
    b.ProductBusinessKey,
    case
        when (select count(*) from Instrument_Product_Test_2 where ProductBusinessKey in ('HIS', 'HIS2') and a.Account = Account) > 1  then 1
        else 0
    end as 'HasHIS'
from
    Member_Household_Test_2 a
inner join
    Instrument_Product_Test_2 b on a.Account = b.Account
where
    b.ProductBusinessKey in ('CBC', 'CB2') and
    a.EmailAddress = 'mmarks@fdsdfsdfs.com'

1 个答案:

答案 0 :(得分:4)

  

我要做的只是从ProductBusinessKey ='CBC'的源表中提取记录,还要交叉检查该特定的“ AccountID”是否在SourceTable中的ProductBusinessKey ='HIS'中有记录。如果找到记录,则将目标表中的“ HasHIS”列标记为TRUE。否则,标记为FALSE

您可以将EXISTS()用作

SELECT AccountID,
       InstrumentID,
       ProductBusinessKey,
       CASE WHEN 
       EXISTS(
       SELECT 1 FROM YourTable WHERE AccountID = T.AccountID and ProductBusinessKey = 'HIS'
       ) 
       THEN 'True' ELSE 'False' END HasHIS
     --THEN 1 ELSE 0 END HasHIS
FROM YourTable T
WHERE ProductBusinessKey = 'CBC'

您可以使用01(位数据类型)代替'True'/'False'