0

使用: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 是上面的聚合查询,还是我在这里遗漏了一些明显的东西?

4

2 回答 2

3
FROM TableOne t1, TableTwo t2

是交叉连接。 来自 t1 的每条记录都将与来自 t2 的每条记录相连接,净赚 10 倍于您预期的记录(如果 t1 有 10% 的 t2 记录)。

于 2013-03-27T00:25:19.400 回答
1

FROM TableOne t1, TableTwo t2交叉连接;对于 table1 和 table2 行的每个组合,您都会得到一行 - 这就是您的 SUM 如此之高的原因。

您需要单独执行这些查询。如果您希望它们在同一个结果集中,您可以使用子查询:

select (
   SELECT SUM(t1.Field)
   FROM TableOne t1
) [t1sum], 
(
   SELECT SUM(t2.Field)
   FROM TableTwo t2
) [t2sum]
于 2013-03-27T00:26:47.477 回答