【发布时间】:2021-08-06 15:15:22
【问题描述】:
尝试连接两个表以显示匹配的总计,但是连接(或分组依据)正在为一些记录(不是全部)创建不正确的总和。我分别检查了这两个表,以确保支付+税的总数匹配,并且在单独的表中查看时它们会这样做。似乎正在发生的是一些“total1”记录被乘以 2(不知道为什么)。
表1:
| pnum | branch | year | total |
|---|---|---|---|
| 5678 | efgh | 2018 | 2000 |
| 5678 | efgh | 2018 | 2579 |
表2:
| pnum | branch | year | paid | tax |
|---|---|---|---|---|
| 5678 | efgh | 2018 | 3200 | 900 |
| 5678 | efgh | 2018 | 400 | 79 |
代码:
Select pnum, a.branch, a.year, sum(total) as total, sum(paid+tax) as total1
from ##table1 a
inner join ##table2 b
on a.[pnum] = b.pnum2 and a.year = left(b.year,4) and a.branch = b.branch
Group by pnum, a.branch, a.year
结果如下所示:
| pnum | branch | year | total | total1 |
|---|---|---|---|---|
| 1234 | abcd | 2020 | 3520 | 3520 |
| 5678 | efgh | 2018 | 4579 | 9158 |
| 9101 | ijkl | 2019 | 2378 | 2378 |
| 1121 | mnop | 2019 | 9436 | 9436 |
如您所见,在第 2 行中,“total1”是“total”值的两倍……“total”和“total1”都应该匹配。
任何帮助/建议将不胜感激。
【问题讨论】:
-
请提供样本数据。结果不正确并不明显。
-
您好@2020db9,请检查第 2 行的支付和税收列值。可能存在错误值。
-
很可能其中一个表有重复的行,可能是
##table2。样本数据和预期结果将大有帮助。 -
养成良好的习惯。每个列引用都应该包含适当的表别名(像“a”这样的别名也只是懒惰的习惯)。我们不知道哪个表包含哪个列,但您的逻辑似乎假设表之间存在 1:1 关系。否则不会有“重复”,你的总数是正确的。您也许可以将所有表联合起来,然后对该结果集求和 - 但如果没有 DDL 和样本数据,这是一个冒险的猜测。
-
总和(已付+税)可能有问题吗?我编辑了我的初始帖子并包含了源数据的示例
标签: sql sql-server inner-join