我有两个 SQL 表
TableA
和 TableB
。
表A:
AgentID SEC CUS
------- ---- ------
22441 138 41332
53321 59 29296
89952 282 89011
68897 297 77654
表B:
AgentID SEC STAT NIN
------- ---- ----- ------
22441 138 C 56428
22441 138 66543
53321 52 C 77532
53321 59 87666
89952 282 C 00988
89952 281 87776
68897 297 11222
我需要加入
TableA
和 TableB
才能获取 TableA
中的所有列和 NIN
中的 TableB
列。但加入表格有一些标准。
TableA
和 TableB
应在 SEC
列上连接。 TableA
将有一排对应一个 AgentID
,但 TableB
可以有一个或两个。对于每个 TableA
,TableB
只能连接一行 AgentID
。首先,在 TableB
中,我们应该寻找 STAT = C
并加入这一行。如果 SEC
中的 TableA
列和 TableB
与 STAT = C
行不匹配,那么我们应该与 TableB
中的第二行加入相同的 AgentID
。如果 TableB
没有两行 AgentID
,我们可以加入任何可用行来匹配 AgentID
。
例如,
AgentID
22441 在 SEC
的两行中具有匹配的 TableB
值,但 NIN
值应来自 STAT = C
行,但 AgentID
53321 没有匹配的 SEC
值STAT = C
,因此 NIN
值应来自空白 STAT
。
我正在寻找的输出
AgentID SEC CUS NIN
------- ---- ------ ------
22441 138 41332 56428
53321 59 29296 87666
89952 282 89011 00988
68897 297 77654 11222
如有任何帮助,我们将不胜感激。谢谢你。
解决方案:
select A.*, B.MIN
from TableA A
join TableB B
on A.SEC = B.SEC
where B.STAT = 'C' or not exists (
select 1
from TableB
where TableB.AgentID = A.AgentID and TableB.STAT = 'C'
)
说明:
TableA
和 TableB
分别加入 A
和 B
来匹配它们我们选择 SEC
TableB
记录,或者不存在与 STAT
为“C”的匹配我们从 STAT
A
加载所有列 MIN