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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SQL - 从源表中提取某些记录,但也交叉引用该表相关的知识,希望对你有一定的参考价值。

我有一个用例,我不确定在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'
答案

我想要做的只是从SourceBusinessKey ='CBC'的源表中提取记录,还要交叉检查以查看特定的“AccountID”是否在源表中有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'

以上是关于SQL - 从源表中提取某些记录,但也交叉引用该表的主要内容,如果未能解决你的问题,请参考以下文章

sql 从源表中删除行时,删除$ TA表中的相应行

需要从源表中获取布尔类型列作为 varchar 并在 Amazon redshift 的目标表中存储为 varchar

在 hive 的外部表中创建分区

SQL Server:交叉引用一个表中的多个列与另一个表中的多个列

如果表中没有相关数据,则从其他表中提取数据

SQL - 使用 SSIS 的增量插入?