繁体   English   中英

SQl使用IIF比较同一行中的2个值

[英]SQl Use IIF to compare 2 values in same row

我在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)填充“ YEAR”字段,但是得到相同的结果。 所有数据均为数字。 结果的一部分如下所示:

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

此查询引发错误“条件表达式中的数据类型不匹配”

SELECT IIf('2014'=2014, 1, 0)

因此,我怀疑您的Yearyearmove字段是不同的数据类型:一种是数字;另一种是数字。 另一个是文字。

找出您要处理的数据类型...

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时,这些函数中的任何一个都会抱怨。 因此,您可以在将值提供给CStr()Val()之前,使用Nz()替代Null。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM