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

合并来自不同SQL Server的两个表的值,sql,merge,Sql,Merge,我有两个(链接的)sql Server,它们的设置基本相同,但内容不同。我想做的是从两个表(每个服务器一个)中合并它们,这样就不会有重复的ID(例如,没有重复的fname),并且计数也会添加到一起 它们可能看起来像 SERV1.DB1.dbo.Table: | fname | count | ---------------------- | 'file1.txt' | 10 | | 'file2.txt' | 5 | | 'file3.txt' | 35 |

我有两个(链接的)sql Server,它们的设置基本相同,但内容不同。我想做的是从两个表(每个服务器一个)中合并它们,这样就不会有重复的ID(例如,没有重复的
fname
),并且
计数也会添加到一起

它们可能看起来像

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   |
我想写一个
选择
输出

| fname       | count |
----------------------
| 'file1.txt' | 50    |
| 'file2.txt' | 155   |
| 'file3.txt' | 35    |
我不想加入工会,工会也不会以我想要的方式合并他们

编辑

  • 它需要不区分大小写,因为
    fname
    可能(读:will)大小写不同
  • fname
    有不同的排序规则(这不是问题,但值得一提)
  • 我通过在每台服务器上执行类似的
    select
    操作来获得这两个表。我可以创建临时表,但如果没有临时表,我更愿意

您可以通过
加入

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

编辑:区分大小写/不区分大小写

根据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
表中的值。

“我不想要联接”-为什么不?最简单、最明显的方法就是做一个完整的外部测试join@Damien_The_Unbeliever因为我认为加入不会以我想要的方式合并我的表。谢谢,这比我想象的要容易得多。哈哈。@user1021726:D很乐意帮忙!看,需要左连接!如果表2中有名称,而表1中没有名称也应该出现在结果中,我建议使用完全外部联接,而不是左联接。在
SELECT
子句中,您还需要一些
COALESCE
爱,以确保您获得一个名称,这样
+
就不会受到
NULL
s的保护。@Damien\u不信者我同意您的合并,但不确定是否有完整的外部联接,这取决于表设计。无论如何,完全的外部连接不会有任何伤害,所以我相应地改变了我的答案