TableA
------
IntId EvId Name Phone1
===== ==== ==== ======
100 aaa xxx 11111
101 bbb yyy 22222
102 ccc zzz 33333
103 bbb asd 44444
104 bbb sdf 55555
TableB
------
IntId ASId Grp Phone2
===== ==== ==== ======
201 bbb yyy 6666
202 ccc zzz 7777
203 bbb asd 8888
204 bbb kkf 9999
205 ddd esd 0000
206 eee ffr 1001
我想使用TableA.EvId = TableB.ASId
将TableA与TableB联接以输出{IndId, EvId, Name, Phone1, Grp, Phone2}
(使用外部联接,因为我希望TableA中的所有记录都具有匹配的TableB列)
我可以使用下面的查询来做到这一点,但是由于EvId和ASId具有重复项,因此它给了我重复项。
SELECT a.IntId, a.EvId, a.Name, a.Phone1, b.Grp, b.Phone2
FROM TableA a
LEFT OUTER JOIN TableB b
ON a.EvId = b.ASId
如果EvId是重复的,请考虑具有最大IntId的记录。 TableB的相同规则
我的最终输出应该是这样-TableA中所有唯一的EvId都使用B上的externaljoin
IntId EvId Name Phone1 Phone2 Grp
100 aaa xxx 11111 null null
104 bbb sdf 55555 9999 kkf
102 ccc zzz 33333 7777 zzz
您能帮我查询吗?
答案 0 :(得分:2)
您可以使用ROW_NUMBER()
:
SELECT a.IntId, a.EvId, a.Name, a.Phone1, b.Grp, b.Phone2
FROM TableA a LEFT OUTER JOIN
(SELECT b.*,
ROW_NUMBER() OVER (PARTITION BY ASId ORDER BY IntID DESC) as seqnum
FROM TableB b
) b
ON a.EvId = b.ASId AND b.seqnum = 1;