2016-05-16 63 views
1

这是我的问题。Access 2010错误结果

第一步。 我总结列HH(别名SUM_Original_values),我得到419.这个结果是正确的。 (见下面的图)

enter image description here

第二步骤。 我只想拿INT HH列的值,我得到417.这个结果是正确的。 (见下面的图)

enter image description here

第三步骤。 我想创建一个列Global_Int_Sum_HH(416),但这个值是不同Int_Sum_HH(417)

enter image description here

为什么结果是型动物?

这是查询

SELECT 
Year, 
Month, 
Customer, 
User, 
Int(Sum(HH)) AS Int_Sum_HH, 

(
SELECT (int(sum(int(HH)))) AS Global_Int_Sum_HH 
FROM T_Att 
HAVING (((Year)="2016") AND ((month)="03") AND ((Customer)="FC")); 
) AS Global_Int_Sum_HH, 

Customer + Str(Global_Int_Sum_HH) AS [KEY] 

FROM T_Att 

GROUP BY Year, Month, Customer, User 
HAVING (((Year)="2016") AND ((Month)="03") AND ((Customer)="FC")); 

回答

1

它看起来对我来说,有一个在你的操作顺序不一致。

在一种情况下,您intsum,并在第二种情况sumint

SELECT 
Year, 
Month, 
Customer, 
User, 
Sum(Int(HH)) AS Int_Sum_HH, 
--^changed order of events to match sub-query 
(
-- v removed redundant int() 
SELECT sum(int(HH)) AS Global_Int_Sum_HH 
FROM T_Att 
HAVING (((Year)="2016") AND ((month)="03") AND ((Customer)="FC")); 
) AS Global_Int_Sum_HH, 

Customer + Str(Global_Int_Sum_HH) AS [KEY] 

FROM T_Att 

GROUP BY Year, Month, Customer, User 
HAVING (((Year)="2016") AND ((Month)="03") AND ((Customer)="FC")); 

上述调整将使两个值的“正确”答案= 416。如果您要将您的操作顺序更改为Int(Sum(HH)),则Global_Int_Sum_HH值将等于419,而您的Int_Sum_HH列将改为417

+1

无关:我还建议您将“HAVING”子句换成“WHERE”子句以提高性能。 – Sturgus

+0

Int(Sum(HH))将给全球419,而不是417. – OpiesDad

+0

@OpiesDad,你说得对,我会编辑我的答案。 – Sturgus