SQL - 从源表中提取某些记录,但也交叉引用该表
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SQL - 从源表中提取某些记录,但也交叉引用该表相关的知识,希望对你有一定的参考价值。
我有一个用例,我不确定在SQL语法方面要利用什么来获得我想要的结果。我的SQL约为6/10(中级)。任何指导将不胜感激!我有我的源表,如下。
然后,我有我想要的“目的地表”:
我想要做的只是从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'
您可以使用0
和1
(位数据类型)而不是'True'/'False'
。
以上是关于SQL - 从源表中提取某些记录,但也交叉引用该表的主要内容,如果未能解决你的问题,请参考以下文章
需要从源表中获取布尔类型列作为 varchar 并在 Amazon redshift 的目标表中存储为 varchar