我一直在努力解决查询问题几天并浏览了答案,并认为我可能无法应用找到的逻辑因为我不擅长SQL。我有两个表,[0100]和[Product],需要计算每个类别的实际值和预测值之间的差异。我已经尝试了一些子查询但无法让它们工作所以回到这个:
SELECT
Product.Description,
Sum([0100].Actual) AS Actual,
Sum([0100].Forecast) AS Forecast,
Sum(IIf([0100]![Forecast]=0,
IIf([0100]![Actual]=0,
0,
IIf([0100]![Actual]>0,9.99,-9.99)
),
([0100]![Actual]-[0100]![Forecast])/[0100]![Forecast]
)
) AS Variance
FROM
0100
INNER JOIN Product ON [0100].Category = Product.ID
GROUP BY
Product.Description;
一旦我有方差列工作,我将删除实际和预测列,但我无法让方差列正常工作,我怀疑这是因为我需要一个子查询。经过多次尝试,我不知道如何继续。我按照以下快照使用公式=IF(AND(B2=0,C2=0),0,IF(C2=0,IF(B2>0,9.99,-9.99),(B2-C2)/C2))
在Excel中工作
**Column A B C Formula
Account Group Actual Forecast Variance**
Admin & Management staff costs -8256.61 -8256.61 0%
Bank interest 0 0 0%
Care staff 4 weekly paid 268 268 0%
Care staff travel -70 -70 0%
Contracts - health & soc services -748317.97 -788317.97 -5%
Donations & fundraising -9665.69 -9465.69 2%
Fundraising & promotion 4695.68 4695.68 0%
Grants -28687 -39687 -28%
任何人都可以提供正确的方差查询帮助,以便它返回与Excel公式相同的结果?我有一个示例数据库,只有产品表和0100
表,记录返回提供的Excel结果,并将查看是否可以附加/提供链接。
非常感谢,
西蒙
Excel的
=IF(AND(B2=0,C2=0),0,IF(C2=0,IF(B2>0,9.99,-9.99),(B2-C2)/C2))
Access中的等价物是:
IIf([0100]![Actual] = 0 And [0100]![Forecast] = 0,
0,
IIf([0100]![Forecast] = 0,
IIf([0100]![Actual] > 0, 9.99, -9.99),
([0100]![Actual]-[0100]![Forecast]) / [0100]![Forecast]
)
)
如果值可以是Null
(即,如果你有空字段)测试Nz(x) = 0
而不仅仅是x = 0
。
IIf(Nz([0100]![Actual]) = 0 And Nz([0100]![Forecast]) = 0,
0,
IIf(Nz([0100]![Forecast]) = 0,
IIf(Nz([0100]![Actual]) > 0, 9.99, -9.99),
(Nz([0100]![Actual])-Nz([0100]![Forecast])) / Nz([0100]![Forecast])
)
)
函数IIf(condition, IfExpression, ElseExpression)
返回IfExpression
或ElseExpression
,但它总是计算两个表达式。因此,即使在测试值<> 0的情况下,也必须应用Nz()
函数.Nz()
将Null
转换为Empty
,而Empty
是类型的默认值。它是0
用于数字类型,空字符串用于字符串等。