Sql 访问子查询
几天来,我一直在与一个查询问题作斗争,并浏览答案,我认为我可能无法应用找到的逻辑,因为我不擅长SQL。我有两个表,[0100]和[Product],需要计算每个类别的实际值和预测值之间的差异。我尝试了许多子查询,但无法使它们正常工作,因此我回到这里:Sql 访问子查询,sql,excel,ms-access,subquery,Sql,Excel,Ms Access,Subquery,几天来,我一直在与一个查询问题作斗争,并浏览答案,我认为我可能无法应用找到的逻辑,因为我不擅长SQL。我有两个表,[0100]和[Product],需要计算每个类别的实际值和预测值之间的差异。我尝试了许多子查询,但无法使它们正常工作,因此我回到这里: SELECT Product.Description, Sum([0100].Actual) AS Actual, Sum([0100].Forecast) AS Forecast, Sum(IIf([0100]![
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;
一旦“差异”列正常工作,我将删除“实际”列和“预测”列,但我无法使“差异”列正常工作,我怀疑这是因为我需要一个子查询。经过多次尝试,我不知道如何继续。我让它在Excel中按照以下公式运行:=IF(AND(B2=0,C2=0),0,IF(C2=0,IF(B2>0,9.99,-9.99),(B2-C2)/C2))
是否有人能提供帮助,使差异查询正确,从而返回与Excel公式相同的结果?我有一个样本数据库,其中只有产品表和0100
表,其中记录返回提供的Excel结果,我将查看是否可以附加/提供链接
非常感谢,
西蒙Excel的
=IF(AND(B2=0,C2=0),0,IF(C2=0,IF(B2>0,9.99,-9.99),(B2-C2)/C2))
在访问方面的等效值为:
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
,字符串为空字符串等。请显示问题中的实际和预期结果以及示例表。问题(不带附件)应包括提供答案所需的所有信息。始终发布错误消息或收到的不希望出现的结果,因为它们无法正常工作,这是没有帮助的。
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])
)
)