我有两个(链接的)sql服务器,它们的设置基本相同,但内容不同。我想要做的是拿2个表(每个服务器一个)并合并它们,这样就没有重复的ID(例如,没有重复fname
)并且count
被加在一起< / p>
它们可能看起来像
SERV1.DB1.dbo.Table:
| fname | count |
----------------------
| 'file1.txt' | 10 |
| 'file2.txt' | 5 |
| 'file3.txt' | 35 |
SERV2.DB2.dbo.Table:
| fname | count |
----------------------
| 'file1.txt' | 40 |
| 'file2.txt' | 150 |
我想写一个select
输出
| fname | count |
----------------------
| 'file1.txt' | 50 |
| 'file2.txt' | 155 |
| 'file3.txt' | 35 |
我不希望加入,联合不会按照我想要的方式合并它们。
修改
fname
可能(读:将)会有所不同fname
有不同的排序规则(这不是问题,但值得一提)select
来获取这两个表。我可以创建临时表,但我更喜欢,如果我没有。答案 0 :(得分:2)
您可以使用JOIN
SELECT table1.fname fname, table1.Count + table2.count Count
FROM SERV1.DB1.dbo.Table table1
FULL OUTER JOIN SERV2.DB2.dbo.Table table2 ON table1.fname=table2.fname
编辑:区分大小写/不敏感depends on the column collation
答案 1 :(得分:1)
根据giammin的回答,这是我自己的建议:
SELECT
COALESCE(t1.fname,t2.fname) fname,
COALESCE(t1.Count,0) + COALESCE(t2.count,0) Count
FROM
SERV1.DB1.dbo.Table t1
FULL OUTER JOIN
SERV2.DB2.dbo.Table t2
ON t1.fname=t2.fname
确保两个表中的所有fname
值都显示在结果中,即使是那些仅出现在SERV2
表中的值。