Ms access 复杂嵌套if语句
我希望有人可以修改我现有的查询,并根据下面列出的2个条件为我提供SQL以便复制和粘贴。非常感谢你,纳撒尼尔 条件#1。比较以下3个字段的值,并输出3个字段中的最低值(不包括空值): “最低标价”Ms access 复杂嵌套if语句,ms-access,ms-access-2007,Ms Access,Ms Access 2007,我希望有人可以修改我现有的查询,并根据下面列出的2个条件为我提供SQL以便复制和粘贴。非常感谢你,纳撒尼尔 条件#1。比较以下3个字段的值,并输出3个字段中的最低值(不包括空值): “最低标价” “最低售价” “衬里\u价格\u例外” 示例:如果“最低标价”=3,“最低卖出价”=7,“最低价格例外”=null,则输出应为3 条件2。如果字段“overide_price”中的值不为空,则字段“overide_price”应替换来自条件#1的输出。如果“overide#u price”中的值为空,则
“最低售价”
“衬里\u价格\u例外” 示例:如果“最低标价”=3,“最低卖出价”=7,“最低价格例外”=null,则输出应为3 条件2。如果字段“overide_price”中的值不为空,则字段“overide_price”应替换来自条件#1的输出。如果“overide#u price”中的值为空,则输出条件#1中的值
如果要在Access会话中运行查询,可以使用自定义VBA函数来简化此操作 正在测试即时窗口中的
MinValue()
函数
? MinValue(4, Null, 2)
2
? MinValue(Null, Null, 2)
2
? MinValue(Null, Null, Null)
Null
所以你可以在这样的查询中处理你的条件#1
SELECT
MinValue(
q.[lowest list price],
q.[lowest price sold],
q.lining_price_exception
) AS lowest_value
qry_to_determine_wmx_price_01 AS q;
至于你的条件#2,我认为Nz()
函数会很有用
Nz(q.overide_price, MinValue(q.[lowest list price], q.[lowest price sold],
q.lining_price_exception))
基本上,Nz()
这就是我提到的功能
Public Function MinValue(ParamArray pValues() As Variant) As Variant
Dim i As Long
Dim iUbound As Long
Dim varMin As Variant
iUbound = UBound(pValues)
varMin = Null
For i = 0 To iUbound
If Not IsNull(pValues(i)) Then
If Not IsNull(varMin) Then
If pValues(i) < varMin Then
varMin = pValues(i)
End If
Else
varMin = pValues(i)
End If
End If
Next
MinValue = varMin
End Function
公共函数MinValue(ParamArray pValues()作为变量)作为变量
我想我会坚持多久
我被束缚得那么久
Dim varMin作为变体
iUbound=UBound(pValues)
varMin=Null
对于i=0到i绑定
如果不是IsNull(pValues(i)),则
如果不是IsNull(varMin),则
如果pValues(i)
如果要在Access会话中运行查询,可以使用自定义VBA函数来简化查询
正在测试即时窗口中的MinValue()
函数
? MinValue(4, Null, 2)
2
? MinValue(Null, Null, 2)
2
? MinValue(Null, Null, Null)
Null
所以你可以在这样的查询中处理你的条件#1
SELECT
MinValue(
q.[lowest list price],
q.[lowest price sold],
q.lining_price_exception
) AS lowest_value
qry_to_determine_wmx_price_01 AS q;
至于你的条件#2,我认为Nz()
函数会很有用
Nz(q.overide_price, MinValue(q.[lowest list price], q.[lowest price sold],
q.lining_price_exception))
基本上,Nz()
这就是我提到的功能
Public Function MinValue(ParamArray pValues() As Variant) As Variant
Dim i As Long
Dim iUbound As Long
Dim varMin As Variant
iUbound = UBound(pValues)
varMin = Null
For i = 0 To iUbound
If Not IsNull(pValues(i)) Then
If Not IsNull(varMin) Then
If pValues(i) < varMin Then
varMin = pValues(i)
End If
Else
varMin = pValues(i)
End If
End If
Next
MinValue = varMin
End Function
公共函数MinValue(ParamArray pValues()作为变量)作为变量
我想我会坚持多久
我被束缚得那么久
Dim varMin作为变体
iUbound=UBound(pValues)
varMin=Null
对于i=0到i绑定
如果不是IsNull(pValues(i)),则
如果不是IsNull(varMin),则
如果pValues(i)
这对您来说应该足够复杂了。以下是测试SQL,无需定义满足这两个条件的任何VBA方法:
Select q.Part_ID,
q.[lowest list price],
q.[lowest price sold],
q.lining_price_exception,
q.overide_price,
NZ(q.overide_price,
IIf(q.[lowest list price]<q.[lowest price sold] OR ISNULL(q.[lowest price sold]),
IIf(q.[lowest list price]<q.lining_price_exception or ISNULL(q.lining_price_exception),
NZ(q.[lowest list price],"No valid Price listed"),
q.lining_price_exception
),
IIf(q.[lowest price sold]<q.lining_price_exception or ISNULL(q.lining_price_exception),
NZ(q.[lowest price sold],"No valid Price listed"),
q.lining_price_exception
)
)
) as Actual_Low_Price
from qry_to_determine_wmx_price_01 as q;
选择q.Part\u ID,
q、 [最低标价],
q、 [最低售价],
q、 价格例外,
q、 超过价格,
新西兰(q.overide_价格,
IIf(q[最低标价]这对您来说应该足够复杂了。下面是测试SQL,无需定义任何满足这两个条件的VBA方法:
Select q.Part_ID,
q.[lowest list price],
q.[lowest price sold],
q.lining_price_exception,
q.overide_price,
NZ(q.overide_price,
IIf(q.[lowest list price]<q.[lowest price sold] OR ISNULL(q.[lowest price sold]),
IIf(q.[lowest list price]<q.lining_price_exception or ISNULL(q.lining_price_exception),
NZ(q.[lowest list price],"No valid Price listed"),
q.lining_price_exception
),
IIf(q.[lowest price sold]<q.lining_price_exception or ISNULL(q.lining_price_exception),
NZ(q.[lowest price sold],"No valid Price listed"),
q.lining_price_exception
)
)
) as Actual_Low_Price
from qry_to_determine_wmx_price_01 as q;
选择q.Part\u ID,
q、 [最低标价],
q、 [最低售价],
q、 价格例外,
q、 超过价格,
新西兰(q.overide_价格,
IIf(q[最低标价]我承认,这绝对是一个更好的解决方案。:-)我承认,这绝对是一个更好的解决方案。:-)事实上,这就是ISNULLs的作用,因为它是一种痛苦…这就是为什么我说你的版本更好,如果只是因为它更容易阅读!我试图使我的版本可读,但你能做的只有这么多。丹尼尔,我更喜欢SQL,因为我不知道如何应用VBA。我运行了你的代码,它有一个轻微的错误,输出“#错误”对于字段“最低标价”不为null,但所有其他字段均为null的所有记录。是否可以修改SQL以防止此错误?请告知我是否应在数据源“qry_to_determinate_wmx_price_01”中将null转换为零(NZ函数)。非常感谢nathanielMake确保所有被比较的字段都是表中的数字。这应该可以解决问题。事实上,这就是ISNULLs的作用,因为它很痛苦…这就是为什么我说你的版本更好,因为它更容易阅读!我试着让我的可读,但你能做的只有这么多。Daniel,我引用SQL,因为我不知道如何应用VBA。我运行了你的代码,它有一个小错误,对所有记录输出“#错误”,其中“最低标价”字段不为null,但所有其他字段均为null。你能修改SQL以防止此错误吗?请告诉我是否应该将null转换为零(NZ函数)在我的数据源“qry_to_determinate_wmx_price_01”中。非常感谢Nathanielm确保所有要比较的字段都是表中的数字。这应该可以解决问题。