根据连接创建具有值的组列
Create group column with values based on join
我有两个 table 1) 一个客户 table 2) 帐户 table. 我想看看哪些帐户是主要帐户哪些是次要帐户。
在一个 table 中,我有 accountRowId
和 AccountNumber
。在另一个 table 中,我有 PrimaryAccountRowId
和 SecondaryAccountRowId
。
对于我的输出,我想将所有 AccountNumbers
与所有 AccountRelationship(primary or seconday) 在每个 AccountNumber
旁边的另一列中。
为了加入 table,对于 PrimaryAccounts
,我会在 PrimaryAccountRowId
加入 AccountRowId
,对于次要帐户,我只是触发器而不是 [= =22=] 会是 SecondaryAccountRowId
。
我的账户table:
AccountRowId = 256073
AccountNumber = 8003564
AccountRowId = 342300
AccountNumber = 2034666
客户table:
PrimaryAccountRowId = 256073
SecondaryAccountRowId = 342300
我想看到我的 table 是什么样子
AccoundNumber AccountRelationship
8003564 Primary
2034666 Secondary
请提供一些有用的 logic/code 我将如何实现这些结果。谢谢
这可以通过在两个 table 之间使用左连接来实现。基本上通过检查 accountRowid 是否存在于来自客户 table 的 primaryAccountRowId 列中,您会知道 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
试试这个:
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
您可以使用 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
我有两个 table 1) 一个客户 table 2) 帐户 table. 我想看看哪些帐户是主要帐户哪些是次要帐户。
在一个 table 中,我有 accountRowId
和 AccountNumber
。在另一个 table 中,我有 PrimaryAccountRowId
和 SecondaryAccountRowId
。
对于我的输出,我想将所有 AccountNumbers
与所有 AccountRelationship(primary or seconday) 在每个 AccountNumber
旁边的另一列中。
为了加入 table,对于 PrimaryAccounts
,我会在 PrimaryAccountRowId
加入 AccountRowId
,对于次要帐户,我只是触发器而不是 [= =22=] 会是 SecondaryAccountRowId
。
我的账户table:
AccountRowId = 256073
AccountNumber = 8003564
AccountRowId = 342300
AccountNumber = 2034666
客户table:
PrimaryAccountRowId = 256073
SecondaryAccountRowId = 342300
我想看到我的 table 是什么样子
AccoundNumber AccountRelationship
8003564 Primary
2034666 Secondary
请提供一些有用的 logic/code 我将如何实现这些结果。谢谢
这可以通过在两个 table 之间使用左连接来实现。基本上通过检查 accountRowid 是否存在于来自客户 table 的 primaryAccountRowId 列中,您会知道 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
试试这个:
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
您可以使用 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