合并来自不同SQL Server的两个表的值
我有两个(链接的)sql Server,它们的设置基本相同,但内容不同。我想做的是从两个表(每个服务器一个)中合并它们,这样就不会有重复的ID(例如,没有重复的合并来自不同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 |
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不信者我同意您的合并,但不确定是否有完整的外部联接,这取决于表设计。无论如何,完全的外部连接不会有任何伤害,所以我相应地改变了我的答案