[英]SQL Server : compare row values in a group and update a field in the same table
[英]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)
因此,我怀疑您的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时,这些函数中的任何一个都会抱怨。 因此,您可以在将值提供给CStr()
或Val()
之前,使用Nz()
替代Null。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.