2个表的SUM函数产生错误的值

时间:2013-03-27 00:21:32

标签: sql-server tsql sql-server-2008-r2

使用:SQL Server 2008 R2

在计算总计百分比时,我在两个不同的表上运行聚合查询(SUM)时遇到了麻烦。单独地,它产生正确的数量;当查询包含两者时,它会产生一个巨大的值,我无法确定它的来源。代码,加上我正在运行的代码来生成第二个表。

SELECT TOP 100 Field
INTO TableTwo
FROM TableOne

SELECT SUM(t1.Field), SUM(t2.Field)
FROM TableOne t1, TableTwo t2

TableTwo派生自TableOne的百分之十(您可以在上面的查询的第一部分中看到)。请注意,它们分别产生正确的值:

SELECT SUM(t1.Field)
FROM TableOne t1

SELECT SUM(t2.Field)
FROM TableTwo t2

SQL Server上面是聚合查询,还是我错过了一些明显的东西?

2 个答案:

答案 0 :(得分:3)

FROM TableOne t1, TableTwo t2

是交叉连接。来自t1的每条记录将与来自t2的 EVERY 记录一起加入,将您预期的记录净额减少10倍(如果t1具有10%的t2记录)。

答案 1 :(得分:1)

FROM TableOne t1, TableTwo t2cross join;对于table1和table2行的每个组合,你得到一行 - 这就是你的SUM如此之高的原因。

您需要单独执行这些查询。如果您希望它们位于相同的结果集中,则可以使用子查询:

select (
   SELECT SUM(t1.Field)
   FROM TableOne t1
) [t1sum], 
(
   SELECT SUM(t2.Field)
   FROM TableTwo t2
) [t2sum]