2015-11-13 70 views
2

使用SQL Server 2008,我会尽我所能来描述我想要做什么。SQL表合并

比方说,我有一个看起来像这样的表答:

表A

VarName | ValueA | ValueB 
----------------------------- 
var1  | 0.12 | 0.34 
var2  | 1.456 | 5.31 
var3  | 43  | 10 

而且,看起来像这样的表B:

表B

VarName | ValueC | ValueD 
----------------------------- 
var1  | 0.03 | 0.04 
var2  | 2.01 | 2.87 
newvar | 55  | 50 

我想要做的就是把这些表结合起来,这样最终结果就像这张表C.

表C

VarName | ValueA | ValueB | ValueC | ValueD 
--------------------------------------------------- 
var1  | 0.12 | 0.34 | 0.03 | 0.04 
var2  | 1.456 | 5.31 | 2.01 | 2.87 
var3  | 43  | 10 | 0  | 0 
newvar | 0  | 0  | 55 | 50 

注意,合并时,共同的行(VAR名)与值是不常见的列和变量在一个表中不存在更新,从其他表有其从另一个表中合并的列设置为0,例如表B中的newvar和表A中的var3。

此请求是否有意义或需要进一步解释?

+2

你尝试过这么远吗? – Sparky

+0

http://www.w3schools.com/sql/sql_join_full.asp似乎是你想要在这里。 –

回答

1

你可以试试:

select VarName, max(ValueA), max(ValueB), max(ValueC), max(ValueD) from (
    select VarName, ValueA, ValueB, 0 as ValueC, 0 as ValueD 
    from TableA 
    union all 
    select VarName, 0, 0, ValueC, ValueD 
    from TableB 
) 
group by VarName 
0

如何:

SELECT 
    VarName 
    ,MAX(IValueA) AS ValueA 
    ,MAX(ValueB) AS ValueB 
    ,MAX(ValueC) AS ValueC 
    ,MAX(ValueD) AS ValueD 
FROM ( 
SELECT 
    VarName 
    ,ValueA 
    ,ValueB 
    ,0 AS ValueC 
    ,0 AS ValueD 
FROM A 
UNION ALL 
SELECT 
    VarName 
    ,0 AS ValueA 
    ,0 AS ValueB 
    ,ValueC 
    ,ValueD 
FROM B 
) a 
GROUP BY VarName