带组合字段的 MS Access 计算字段
MS Access Calc Field with combined fields
我已经尝试解决这个计算字段问题大约 30 分钟了,看起来我在 [points] 和 [contrib] 等表达式中的单个字段条件是正确的,但组合 ([points]+ [contrib]) 字段不满足将字段设置为正确成员类型的要求,因此当添加这些时,它 returns 一些其他成员类型作为基本类型。我可以将 between 运算符与添加的字段一起使用......?我试过了,但是有一些组合错误。所以换句话说,如果你得到 45 分,它会将你设置为 basic only named in the points field,如果你的 contrib 为 45,你将按预期在 calc 字段中设置为 basic,但如果它是 50 + 50,则相反当它应该是 "better" 成员标签时设置为基本。否则这个简单的语句应该看起来是正确的,但计算机在添加时并没有读取它。由于某种原因,它一定不能识别组合值,并且计算字段没有 sum() 函数。
重点在这里:(([points]+[Contrib]) >= 45 And ([points]+[Contrib]) < 100),"Basic",
IIf(([points] >=45 And [points]<100) Or ([Contrib] >=45 And [Contrib] <100) Or (([points]+[Contrib]) > = 45 And ([points]+[contrib] < 100),"Basic",
IIf(([points] >=100 And [points] <250) Or ([Contrib] >=100 And [Contrib] <250) Or ((([points]+[Contrib]) >=100) And (([points]+[Contrib])<250)),"Better",
IIf(([points] >=250 And [points]<500) Or ([Contrib] >=250 And [Contrib] <500) Or ((([points]+[Contrib]) >=250) And (([points]+[Contrib])<500)),"Great",
IIf(([points] >=500) Or ([Contrib] >=500) Or (([points]+[Contrib]) >=500),"Best","Non-member"))))
BETWEEN 运算符 returns 如果您测试的值 >= 或 <= 您对 BETWEEN 的限制,则为 TRUE。
如果您查看的是 50+50,则总数 = 100,而您介于 44 和 100 之间。这将导致答案 "Basic"。将 ([points]+[Contrib]) Between 44 And 100) 的范围更改为 ([points]+[Contrib]) Between 44 And 99)
这是来自 Access 2010 table 的数据示例,其中包括一个名为 member_type:
的计算字段
id points Contrib member_type
-- ------ ------- ----------
1 1 1 Non-member
2 50 1 Basic
3 200 1 Better
4 300 1 Great
5 600 1 Best
如果这就是您想要的计算字段,这里是我用于 member_type:
的表达式
IIf([points]+[Contrib]>=45 And [points]+[Contrib]<100,'Basic',IIf([points]+[Contrib]>=100 And [points]+[Contrib]<250,'Better',IIf([points]+[Contrib]>=250 And [points]+[Contrib]<500,'Great',IIf([points]+[Contrib]>=500,'Best','Non-member'))))
如果我没有完全正确,这里是相同的表达式格式,以便您可以更好地看到需要更改的地方:
IIf([points]+[Contrib]>=45 And [points]+[Contrib]<100,'Basic',
IIf([points]+[Contrib]>=100 And [points]+[Contrib]<250,'Better',
IIf([points]+[Contrib]>=250 And [points]+[Contrib]<500,'Great',
IIf([points]+[Contrib]>=500,'Best','Non-member'
))))
注意,如果 points 或 Contrib 为空,member_type 将显示 "Non-member"。如果那不是您想要的行为,您将需要更复杂的表达式。由于计算字段表达式不能使用 Nz()
,因此您必须用 IIf([points] Is Null,0,[points])
来代替 [points]
和 IIf([Contrib] Is Null,0,[Contrib])
来代替 [Contrib]
为这些字段禁止 Null 会更简单(将它们的 Required 属性 设置为 Yes)并设置 默认值为零。
我已经尝试解决这个计算字段问题大约 30 分钟了,看起来我在 [points] 和 [contrib] 等表达式中的单个字段条件是正确的,但组合 ([points]+ [contrib]) 字段不满足将字段设置为正确成员类型的要求,因此当添加这些时,它 returns 一些其他成员类型作为基本类型。我可以将 between 运算符与添加的字段一起使用......?我试过了,但是有一些组合错误。所以换句话说,如果你得到 45 分,它会将你设置为 basic only named in the points field,如果你的 contrib 为 45,你将按预期在 calc 字段中设置为 basic,但如果它是 50 + 50,则相反当它应该是 "better" 成员标签时设置为基本。否则这个简单的语句应该看起来是正确的,但计算机在添加时并没有读取它。由于某种原因,它一定不能识别组合值,并且计算字段没有 sum() 函数。 重点在这里:(([points]+[Contrib]) >= 45 And ([points]+[Contrib]) < 100),"Basic",
IIf(([points] >=45 And [points]<100) Or ([Contrib] >=45 And [Contrib] <100) Or (([points]+[Contrib]) > = 45 And ([points]+[contrib] < 100),"Basic",
IIf(([points] >=100 And [points] <250) Or ([Contrib] >=100 And [Contrib] <250) Or ((([points]+[Contrib]) >=100) And (([points]+[Contrib])<250)),"Better",
IIf(([points] >=250 And [points]<500) Or ([Contrib] >=250 And [Contrib] <500) Or ((([points]+[Contrib]) >=250) And (([points]+[Contrib])<500)),"Great",
IIf(([points] >=500) Or ([Contrib] >=500) Or (([points]+[Contrib]) >=500),"Best","Non-member"))))
BETWEEN 运算符 returns 如果您测试的值 >= 或 <= 您对 BETWEEN 的限制,则为 TRUE。
如果您查看的是 50+50,则总数 = 100,而您介于 44 和 100 之间。这将导致答案 "Basic"。将 ([points]+[Contrib]) Between 44 And 100) 的范围更改为 ([points]+[Contrib]) Between 44 And 99)
这是来自 Access 2010 table 的数据示例,其中包括一个名为 member_type:
的计算字段id points Contrib member_type
-- ------ ------- ----------
1 1 1 Non-member
2 50 1 Basic
3 200 1 Better
4 300 1 Great
5 600 1 Best
如果这就是您想要的计算字段,这里是我用于 member_type:
的表达式IIf([points]+[Contrib]>=45 And [points]+[Contrib]<100,'Basic',IIf([points]+[Contrib]>=100 And [points]+[Contrib]<250,'Better',IIf([points]+[Contrib]>=250 And [points]+[Contrib]<500,'Great',IIf([points]+[Contrib]>=500,'Best','Non-member'))))
如果我没有完全正确,这里是相同的表达式格式,以便您可以更好地看到需要更改的地方:
IIf([points]+[Contrib]>=45 And [points]+[Contrib]<100,'Basic',
IIf([points]+[Contrib]>=100 And [points]+[Contrib]<250,'Better',
IIf([points]+[Contrib]>=250 And [points]+[Contrib]<500,'Great',
IIf([points]+[Contrib]>=500,'Best','Non-member'
))))
注意,如果 points 或 Contrib 为空,member_type 将显示 "Non-member"。如果那不是您想要的行为,您将需要更复杂的表达式。由于计算字段表达式不能使用 Nz()
,因此您必须用 IIf([points] Is Null,0,[points])
来代替 [points]
和 IIf([Contrib] Is Null,0,[Contrib])
来代替 [Contrib]
为这些字段禁止 Null 会更简单(将它们的 Required 属性 设置为 Yes)并设置 默认值为零。