使用: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上面是聚合查询,还是我错过了一些明显的东西?
答案 0 :(得分:3)
FROM TableOne t1, TableTwo t2
是交叉连接。来自t1的每条记录将与来自t2的 EVERY 记录一起加入,将您预期的记录净额减少10倍(如果t1具有10%的t2记录)。
答案 1 :(得分:1)
FROM TableOne t1, TableTwo t2
是cross join;对于table1和table2行的每个组合,你得到一行 - 这就是你的SUM如此之高的原因。
您需要单独执行这些查询。如果您希望它们位于相同的结果集中,则可以使用子查询:
select (
SELECT SUM(t1.Field)
FROM TableOne t1
) [t1sum],
(
SELECT SUM(t2.Field)
FROM TableTwo t2
) [t2sum]