【问题标题】:Merge the values of two tables from different SQL Servers合并来自不同 SQL Server 的两个表的值
【发布时间】:2013-12-04 10:13:21
【问题描述】:

我有两个(链接的)sql 服务器,它们的设置基本相同,但它们的内容不同。我想要做的是获取 2 个表(每个服务器一个)并将它们合并,这样就没有重复的 ID(例如,没有重复的 fname)并且 count 被添加在一起

它们可能看起来像

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 得到这两个表。我可以创建临时表,但如果我没有的话我会更喜欢。

【问题讨论】:

  • “我不想加入” - 为什么不呢?简单明了的做法是完全外连接
  • @Damien_The_Unbeliever 因为我认为连接不会按照我想要的方式合并我的表。

标签: sql merge


【解决方案1】:

你可以通过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

【讨论】:

  • 谢谢,比我想象的轻松多了哈哈。
  • @user1021726 :D 乐于助人!看看需要左连接!
  • 如果表 2 中而不是表 1 中出现的名称也应该出现在结果中,我建议使用完全外连接而不是左连接。您还需要在SELECT 子句中添加一些COALESCE 爱,以确保您获得名称,从而保护+ 免受NULLs 的影响。
  • @Damien_The_Unbeliever 我同意你的合并,不确定完全外连接,这取决于表设计。无论如何,完全外部连接不会受到伤害,所以我相应地改变了我的答案
【解决方案2】:

这是我自己的建议,基于 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 的表中的值。

【讨论】:

    猜你喜欢
    • 2021-02-08
    • 2020-08-05
    • 1970-01-01
    • 2013-07-30
    • 1970-01-01
    • 1970-01-01
    • 2018-01-12
    • 2020-01-10
    • 1970-01-01
    相关资源
    最近更新 更多