使用基于联接的值创建组列

时间:2019-12-10 03:57:30

标签: sql sql-server join subquery unpivot

我有两个表 1)客户表2)帐户表。我想查看哪些帐户是主要帐户,哪些是次要帐户。

在一个表中,我有accountRowIdAccountNumber。在另一个表中,我有PrimaryAccountRowIdSecondaryAccountRowId

对于我的输出,我想将所有AccountNumbers放在一列中,并将所有 AccountRelationship(主要或次要) 放在每个{{ 1}}。

为了加入表格,对于AccountNumber,我将在PrimaryAccounts上加入AccountRowId;对于次要帐户,我将只使用触发器而不是拥有PrimaryAccountRowIdprimaryAccountRowId

我的帐户表:

SecondaryAccountRowId

客户表:

  AccountRowId = 256073
  AccountNumber = 8003564
  AccountRowId = 342300
  AccountNumber = 2034666

我想看到桌子的样子

   PrimaryAccountRowId = 256073
   SecondaryAccountRowId = 342300

请提供一些有关如何实现这些结果的有用逻辑/代码。谢谢

3 个答案:

答案 0 :(得分:1)

这可以通过使用两个表之间的左联接来实现。基本上,通过检查客户表的primaryAccountRowId列中是否存在accountRowid,您将知道account_number是否为主要帐户,类似的逻辑也为次要帐户

例如:

   select a.accountNumber
         ,max(case when p_acct.PrimaryAccountRowId is not null then 'PRIMARY' 
                   when sec_acct.PrimaryAccountRowId is not null then 'SECONDARY'
               end) as acct_relationship
     from account a
left join customer p_acct
       on a.AccountRowId =p_acct.PrimaryAccountRowId 
left join customer sec_acct
       on a.AccountRowId =sec_acct.PrimaryAccountRowId 
 group by a.accountNumber

答案 1 :(得分:0)

尝试一下:

SELECT AccountNumber,
    MAX(CASE WHEN B.PrimaryAccountRowId IS NOT NULL THEN 'Primary'
             WHEN C.SecondaryAccountRowId IS NOT NULL THEN 'Secondary'
        END)AccountRelationship
FROM AccountTable A
LEFT JOIN CustomerTable B ON A.AccountRowId = B.PrimaryAccountRowId
LEFT JOIN CustomerTable C ON A.AccountRowId = C.SecondaryAccountRowId
GROUP BY AccountNumber

答案 2 :(得分:0)

您可以使用UNION ALL实现此目的。

SELECT a.AccountNumber, "Primary" AS AccountRelationship
FROM Account AS a
INNER JOIN Customer AS c
ON a.AccountRowId = c.PrimaryAccountRowId
UNION ALL
SELECT a.AccountNumber, "Secondary" AS AccountRelationship
FROM Account AS a
INNER JOIN Customer AS c
ON a.AccountRowId = c.SecondaryAccountRowId