我在MS Access中使用SQL并且需要连续比较2个值以确定第3个字段的结果。 " Yearmove"字段在所有情况下都没有值。这是我正在运行的测试代码
SELECT z.SCHOOL, z.Year as Year, ProgBuild.BldgNo, ProgMoveBuild.yearmove AS Yearmove,
IIF([Year]=[Yearmove], 1, 0) AS Result
在" Yearmove"的情况下,结果很好。为空,并按预期显示0。任何地方" Yearmove"有一个数字,结果字段读取" #ERROR",所以当条件满足时和不满足时。我已经尝试过填充"年份"带有文字的字段(例如" 2014")和非文字的字段(例如2014)但获得相同的结果。所有数据均为数字。 以下是结果的一部分:
SCHOOL Year BldgNo Yearmove Result
254 2014 254 0
256 2014 256 0
260 2014 260 0
261 2014 261 0
262 2014 202 0
301 2014 301 0
307 2014 307 2019 #ERROR
313 2014 313 2019 #ERROR
314 2014 314 0
321 2014 321 0
322 2014 322 0
答案 0 :(得分:1)
此查询引发错误,"数据类型不匹配的条件表达式" :
SELECT IIf('2014'=2014, 1, 0)
所以我怀疑你的 Year 和 yearmove 字段是不同的数据类型:一个是数字;另一个是文字。
找出您正在处理的数据类型......
SELECT
z.Year,
TypeName(z.Year) AS TypeOfYear,
ProgMoveBuild.yearmove,
TypeName(ProgMoveBuild.yearmove) AS TypeOfyearmove
FROM [whatever you have now as your data source(s)]
如果更改其中一个字段的数据类型不实用,则可以将字段的值转换为查询中IIf
条件的另一个类型。 CStr()
会将数值转换为字符串。并且Val()
会将字符串值强制转换为数字。但是,当你给它们Null时,这些函数中的任何一个都会抱怨。因此,在将值提供给Nz()
或CStr()
之前,您可以使用Val()
替换其他内容为Null。