您可以使用具有Row_number的CTE从tableB中仅获取每个docNum具有最大id的行,然后加入该CTE。
首先,创建并填充样本表(
请
请在您未来的问题中为我们保留此步骤):
DECLARE @A As Table
(
Id int,
DocNum char(7),
DocTitle varchar(20)
);
DECLARE @B As Table
(
Id int,
DocNum char(7),
[Status] varchar(20)
);
INSERT INTO @A VALUES
(1, 'ST-0001', 'SomeTitle'),
(2, 'ST-0002', 'SomeTitle'),
(3, 'ST-0003', 'SomeTitle'),
(4, 'ST-0004', 'SomeTitle'),
(5, 'ST-0005', 'SomeTitle');
INSERT INTO @B VALUES
(1, 'ST-0001', 'Incomplete'),
(2, 'ST-0001', 'Complete'),
(3, 'ST-0002', 'Complete'),
(4, 'ST-0003', 'Incomplete'),
(5, 'ST-0004', 'Incomplete'),
(6, 'ST-0004', 'Complete'),
(7, 'ST-0005', 'Incomplete');
;WITH CTE AS
(
SELECT Id,
DocNum,
[Status],
ROW_NUMBER() OVER(PARTITION BY DocNum ORDER BY Id DESC) As Rn
FROM @B
)
SELECT A.DocNum, A.DocTitle, CTE.[Status]
FROM @A A
INNER JOIN CTE ON A.DocNum = CTE.DocNum
WHERE CTE.rn = 1
结果:
DocNum DocTitle Status
ST-0001 SomeTitle Complete
ST-0002 SomeTitle Complete
ST-0003 SomeTitle Incomplete
ST-0004 SomeTitle Complete
ST-0005 SomeTitle Incomplete
You can see a live demo on rextester.