2017-08-16 43 views
0

遺漏值我有以下表格:合併兩個表,並添加缺少的ID

ID | Name | Value1 | Value2 
1 | A | 1000 | 2000 
2 | A | 3000 | 4000  
1 | C | 1100 | 2200 
2 | B | 1500 | 2500 

,我想輸出如下表:

ID | Name | Value1 | Value2 
1 | A | 1000 | 2000 
2 | A | 3000 | 4000 
1 | C | 1100 | 2200 
2 | B | 1500 | 2500 
2 | C | 1100 | 2200 
1 | B | 1500 | 2500 

所以基本上我要複製的缺失每個名稱的值(ID只有兩個值 - 1或2)。只有當我知道一個ID包含所有可用名稱時,我纔可以在表格本身上使用LEFT JOIN做到這一點。有沒有更好的辦法?我正在使用SQL Server 2014.

在此先感謝。

回答

3
SELECT A1.ID, A2.NAME, ISNULL(A.Value1, A3.Value1) Value1, ISNULL(A.Value2, 
A3.Value2) Value2 FROM 
(SELECT DISTINCT ID FROM MyTable) A1 CROSS APPLY 
(SELECT DISTINCT NAME FROM MyTable) A2 OUTER APPLY 
(SELECT TOP 1 Value1, Value2 FROM MyTable A3 WHERE A3.NAME = A2.NAME) A3 
LEFT JOIN MyTable A ON A.ID = A1.ID AND A.NAME = A2.NAME 
ORDER BY A1.ID, A2.NAME 
+0

太棒了。非常感謝。 – sonarclick