将值的SUM与SQL Server中的不同表进行比较

时间:2018-01-10 15:49:11

标签: sql sql-server sum

我有两个表具有相似的值,我需要比较两者并找出它们之间的差异:

SQL FIDDLE - http://sqlfiddle.com/#!6/7412e/9

现在你可以看到6月17日数据的两个表之间存在差异。

你可以看到(作为每个人的总数)表1的6月份为75英镑,但表2的6月份为125英镑。

我正在寻找的结果是将金额汇总在一起并在每月的表格之间进行比较,如果两个表格之间的金额存在差异,我希望它在“未知”下列出。

| MonthYear | Person | Amount | Month total
+-----------+--------+--------+--------------
|    Jun-17 |    Sam |     25 | 75(Table1)
|    Sep-17 |    Ben |     50 | 50(Table2)
|    Jun-17 |    Tom |     50 | 75(Table1)
|    Jun-17 |    Sam |     25 | 125(Table2)
|    Sep-17 |    Ben |     50 | 50(Table2)
|    Jun-17 |    Tom |     50 | 125(Table2)
|    Jun-17 |        |     50 | 125(Table2)

现在当一个月的总金额存在差异时,我希望将差异归类为未知

e.g

| MonthYear | Person | Amount | Month total
+-----------+--------+--------+--------------
|    Jun-17 |    Sam |     25 | 75(Table1)
|    Sep-17 |    Ben |     50 | 50(Table2)
|    Jun-17 |    Tom |     50 | 75(Table1)
|    Jun-17 |    Sam |     25 | 125(Table2)
|    Sep-17 |    Ben |     50 | 50(Table2)
|    Jun-17 |    Tom |     50 | 125(Table2)
|    Jun-17 | Unknown|     50 | 125(Table2)

我知道你可以创建一个案例,当这个人为空时显示未知但我需要根据每月计算的两个表之间的差异来专门计算。

这对任何人都有意义吗,很难解释。

1 个答案:

答案 0 :(得分:3)

通常,在任何FROM子句中,只要给它一个核心化名称(在这一个中为t1和t2),就可以用另一个SELECT替换表名:

SELECT t1.MonthYear, t1.AmountT1, t2.AmountT2, t1.amountT1 - isnull(t2.amountT2, 0) as Unknown'
from
  ( SELECT
    MonthYear, 
    SUM(Amount) AS [AmountT1]
    FROM
    Invoice  
    GROUP BY MonthYear) t1
left outer join
   ( SELECT 
     MonthYear, 
     SUM(Amount) AS [AmountT2]
     FROM
     Invoice2
     GROUP BY MonthYear) t2 on t2.MonthYear = t1.MonthYear