2013-03-27 30 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]