2017-09-04 22 views
0

我想加入2個表,但表只有B選擇值其中id是最大的和2列的表之間的匹配選擇最高值A & B.加入2個表,其中對另一個表

我都試過,但由於表2的最高值,它只選擇1行,但我需要顯示整個表A.下面

WITH CTE AS 
(
    SELECT DocNum, Status 
    FROM TableB 
    WHERE Id = (SELECT MAX(Id) FROM TableB) 
) 
SELECT TableA.DocNum, DocTitle, cte.Status 
FROM TableA 
INNER JOIN cte 
ON TableA.DocNum = cte.DocNum 

例如:

Table A 
    Id DocNum DocTitle 
    1 ST-0001 SomeTitle 
    2 ST-0002 SomeTitle 
    3 ST-0003 SomeTitle 
    4 ST-0004 SomeTitle 
    5 ST-0005 SomeTitle 

Table B 
    Id DocNum Status 
    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 

Result 
    DocNum DocTitle Status 
    ST-0001 SomeTitle Complete 
    ST-0002 SomeTitle Complete 
    ST-0003 SomeTitle Incomplete 
    ST-0004 SomeTitle Complete 
    ST-0005 SomeTitle Incomplete 
+0

你嘗試過什麼到目前爲止,來解決這個問題? –

+0

您正在使用哪種版本的SQL(例如MySQL,SQL Server等)?你嘗試過什麼嗎? –

+0

'Join','Group by'是解決方案 –

回答

0

您可以使用CTE與ROW_NUMBER每docNum最大的ID從tableB的只得到了行,然後再加入到該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'); 

然後,創建CTE與tableB的的ROW_NUMBER:

;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.

+0

感謝您的支持。如果TableB不包含TableA中的DocNum,那麼它仍然可能在結果表中顯示爲空或只是空的狀態?我需要保留結果中的原始TableA中的所有DocNums以及Found狀態。 – Ryan

+0

是的,只需將內部連接更改爲左連接即可。 –

+0

我試過了,但我還沒有成功。爲了運行你的例子,我從TableB中刪除了id(7),結果表中沒有包括來自TableA的id(5),但我仍然喜歡它。 – Ryan

相關問題