I have two tables 1) a customer table 2)Account table. I want to see what accounts are primary and which are secondary accounts.
In one table I have accountRowId and AccountNumber. In the other table I have PrimaryAccountRowId and SecondaryAccountRowId.
For my output I would like to have all AccountNumbers in one column with all the AccountRelationship(primary or seconday) in another column beside each AccountNumber.
In order to join table, for PrimaryAccounts I would join AccountRowId on PrimaryAccountRowId and for secondary Accounts I would just flip flop and instead of having the primaryAccountRowId it would be SecondaryAccountRowId.
My Account table:
AccountRowId = 256073 AccountNumber = 8003564 AccountRowId = 342300 AccountNumber = 2034666
Customer table:
PrimaryAccountRowId = 256073 SecondaryAccountRowId = 342300
What I want to see my table look like
AccoundNumber AccountRelationship
8003564 Primary
2034666 Secondary
Please provide some helpful logic/code of how I would achieve these results. Thanks
Advertisement
Answer
This can be achieved using a left join between the two tables. Basically by checking if the accountRowid exists in the column primaryAccountRowId from customer table you would know if the account_number is a primary, similarly the logic for secondary as well
eg:
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