合并来自不同SQL Server的两个表的值

时间:2013-12-04 10:13:22

标签: sql merge

我有两个(链接的)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来获取这两个表。我可以创建临时表,但我更喜欢,如果我没有。

2 个答案:

答案 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表中的值。