【问题标题】:Merge two tables with different amount合并两个不同数量的表
【发布时间】:2014-01-22 21:56:22
【问题描述】:

我有两个具有相同字段名称的表(表 1 和表 2)。 我想合并两个表并在结果表中显示两个表中的总金额。

请参见下面的示例。请考虑在表 1 中有 4500 条记录和表 2 400。 我尝试了合并,完全连接螺母无法获得预期的结果。

Table1
Account_number  Amount
    aaa          100
    bbb           50
    ccc          200
    ddd           20

Table2  
Account_number  Amount
    aaa           85
    bbb           50
    ccc           10
    ddd           40

Result
Account_number  Amount
    aaa          185
    bbb          100
    ccc          210
    ddd           60

【问题讨论】:

  • 完全加入应该可以,请您发布代码吗?
  • 请发布您的代码..
  • select dp.account_number,dp.amount+d.amount as TotalAmount from table1 as dp full external join Table2 as d on dp.account_number = d.account_number 其中 dp.account_number 不为空 order by TotalAmount描述
  • 所有记录的字段相同,但记录不同。如果我使用完全连接,我只得到匹配数据的数量,而不匹配的数据为空

标签: sql merge sql-server-2012


【解决方案1】:

假设 Table2 中的所有 Account-Numbers 在 Table1 中也有一个条目,则以下语句应该有效:

SELECT Table1.Account_number, Table1.Amount + COALESCE(Table2.Amount, 0)
FROM Table1
LEFT JOIN Table2 ON Table1.Account_number=Table2.Account_number;

否则,您可以使用切换表名使用相同的语句进行 UNION:

SELECT Table1.Account_number, Table1.Amount + COALESCE(Table2.Amount, 0)
FROM Table1
LEFT JOIN Table2 ON Table1.Account_number=Table2.Account_number
UNION
SELECT Table2.Account_number, Table2.Amount + COALESCE(Table1.Amount, 0)
FROM Table2
LEFT JOIN Table1 ON Table2.Account_number=Table1.Account_number

【讨论】:

  • 另外,如果你想让它更通用,你可以改变left进行完全连接,并使用coalesce来确定account_number和table1.amount
【解决方案2】:
SELECT COALESCE(Table1.Account_number,Table2.Account_number), COALESCE(Table1.Amount, 0)   + COALESCE(Table2.Amount, 0)
FROM Table1
FULL JOIN Table2 ON Table1.Account_number=Table2.Account_number;

【讨论】:

  • 太棒了,它完美地工作;)你能简要解释一下合并功能吗?谢谢
  • coalesce 将返回列表中第一个计算结果为 NOT NULL 的表达式
猜你喜欢
  • 2015-04-25
  • 2023-04-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-04-10
  • 2013-07-30
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多