比较 2 个表中的值并生成具有差异的新表

Posted

技术标签:

【中文标题】比较 2 个表中的值并生成具有差异的新表【英文标题】:Compare values from 2 tables and produce a new table with the differences 【发布时间】:2017-09-07 20:56:51 【问题描述】:

我正在尝试在 SQL Server(脚本)中找到一种方法:

    给定 2 个表,具有相同的列结构 由共享相同键的行填充 但其中一列中的值不同 (INTEGER) 在两个表中查找具有匹配键的行并比较它们以生成新行。在不同的表中,其余列中的匹配值完全相同,而唯一不匹配的列之间的值不同。

例如。这是 4 个版本中的相同数据库,每次新迭代都会累积以前版本的值,我想要实现的是一个不同的新数据库(比如在 db1 中售出的苹果数量为 5,而在 db2 中的数量售出的苹果数为 20,我需要在新表中添加一个值为 15 的新行。

【问题讨论】:

添加一些示例表数据和预期结果表 - 全部为格式化文本(不是图像)。同时向我们展示您当前的查询尝试。 对我来说,这听起来像是外键上的简单连接并在整数字段上进行计算。 到目前为止您尝试过什么?请尝试做点什么。 【参考方案1】:
CREATE TABLE foo (
    theKey int NOT NULL IDENTITY(1,1) PRIMARY KEY,
    someInt int
)

CREATE TABLE bar (
    theKey int NOT NULL IDENTITY(1,1) PRIMARY KEY,
    otherInt int
)

CREATE TABLE output (
    theKey int NOT NULL PRIMARY KEY,
    someInt int,
    otherInt int,
    valueDifference int
)

INSERT INTO output ( theKey, someInt, otherInt, valueDifference )
SELECT
    foo.theKey,
    foo.someInt,
    bar.otherInt,
    foo.someInt - bar.otherInt AS valueDifference
FROM
    foo
    INNER JOIN bar ON foo.theKey = bar.theKey

【讨论】:

以上是关于比较 2 个表中的值并生成具有差异的新表的主要内容,如果未能解决你的问题,请参考以下文章

SQL:如何在具有多列的新表中复制表中的一行

Mysql - 将值插入具有未知主键的多个表中

PL/SQL 仅使用游标将 2 个表中的数据检索到新表中

如何比较两个表的列并将值插入到基于 SQL Server 中存储过程中的比较的新表中

SQL Server - 使用 PIVOT 查询比较 2 个表中的字段

如何在具有某些首字母的新表中插入所有行(pl/sql)