2013-03-27 25 views
0

使用:SQL Server 2008 R2的SUM函数对于2个表可生产错误值

在计算总的百分比,上运行两个不同的表汇总查询(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服务器上面的汇总查询,或者我失去了一些东西明显在这里吗?

+3

'FROM TableOne T1,TableTwo t2'是[交叉连接(http://en.wikipedia.org/wiki/Join_(SQL )#Cross_join);它不会做你认为的事情! – Blorgbeard 2013-03-27 00:23:34

回答

3
FROM TableOne t1, TableTwo t2 

是一个交叉连接。 每一个从t1的记录将加入每个记录从t2,净额10倍您预期的记录(如果t1有t2记录的10%)。

+0

谢谢;我没有足够的代表让你高兴,但如果可以的话,我会。 – QuestionC3PO 2013-03-27 00:36:55

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]