我有一个用例,我不确定是否可以利用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'
答案 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'
您可以使用0
和1
(位数据类型)代替'True'/'False'
。