代码之家  ›  专栏  ›  技术社区  ›  Mike Marks

SQL-从源表中提取某些记录,但同时交叉引用同一个表

  •  1
  • Mike Marks  · 技术社区  · 7 年前

    我有一个用例,我不确定如何利用SQL语法来获得我想要的结果。我的SQL大约是6/10(中级)。任何指导都将不胜感激!下面是我的源表。

    然后我得到了我想要的“目的地表”:。

    我要做的只是从源表中提取记录,其中 productbusinesskey='cbc'. ,但还要交叉检查以查看该特定的“accountid”是否在源表中有记录,其中 productbusinesskey='his'. 。如果找到记录,则将目标表中的“hashis”列标记为 true。否则,将标记为 false

    这就是我被困的地方。我只是不确定我是否需要做一个花哨的 case statement,或者使用排名/分区。有什么想法吗?

    我到目前为止所做的尝试都是在下面,但显然不起作用——这也带来了他的记录:

    选择
    A.帐户,
    仪器仪表,
    B.产品,
    B.发起日期,
    a.电子邮件地址,
    B.产品业务密钥,
    案例
    当(从instrument_product_test_2中选择count(*)时,其中productbusinesskey in(“his”,“his2”)和a.account=account)>1,然后1
    其他0
    以“hashis”结尾
    从
    成员家庭测试
    内连接
    仪器产品测试账户=账户
    在哪里?
    b.productbusinesskey in(‘cbc’,‘cb2’)和
    a.emailAddress='mmarks@fdsdfsdfs.com'
    < /代码> <调解)。任何指导都将不胜感激!下面是我的源表。

    enter image description here

    然后我得到了我想要的“目的地表”:

    enter image description here

    我要做的只是从源表中提取记录ProductBusinessKey = 'CBC'同时还要交叉检查该特定的“accountID”是否在源表中有记录,其中ProductBusinessKey = 'HIS'. 如果找到记录,则将目标表中的列“hashis”标记为TRUE. 否则,马克FALSE.

    这就是我被困的地方。我只是不确定我是否需要做一个幻想CASE语句,或使用排序/分区。有什么想法吗?

    到目前为止,我所做的尝试如下,但显然不起作用——这也将带来他的记录:

    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 回复  |  直到 7 年前
        1
  •  4
  •   Ilyes    7 年前

    我要做的只是从productbusinesskey='cbc'的源表中提取记录,还要交叉检查该特定的“accountid”是否在productbusinesskey='his'的源表中有记录。如果找到记录,则将目标表中的列“hashis”标记为true。否则,标记为假

    你可以使用 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' .