Office中国论坛/Access中国论坛

标题: 问为何这个IIF查旬解决不了 [打印本页]

作者: lingjiang    时间: 2020-4-16 11:40
标题: 问为何这个IIF查旬解决不了
我想对各取值分数进行合计,结果发现空值不能处理,我的计划是如果黑框中的各个值:[体重分值]+[肺活量分值]+[立定跳远分值])+([坐位体前屈分值]+[800米/1000米分值])+[引体仰卧分值]不是空的就相加得出总和,如果一个多个为空就显示为空值,不计算。然后和画圈的和标准分相加得出总分,它们是反过来如果空值就化为0和标准分相加,如果标准分为空就不相加:

学年总分: [标准分2]+[引体仰卧附加分]+[800米/1000米附加分]

作者: tmtony    时间: 2020-4-16 12:22
【来自Office中国机器人】加NZ函数处理
作者: lingjiang    时间: 2020-4-16 13:56
本帖最后由 lingjiang 于 2020-4-16 14:02 编辑

现在情况是这样,三个相加充成字符连起来,没有求出和,另外,其中:[体重分值]、[肺活量分值]、[立定跳远分值])、([坐位体前屈分值]、[800米/1000米分值])、[引体仰卧分值]如果一个为空值,就返回空值做不到,还请大侠教一下,另外[标准分]、[800米/1000米附加分]、[引体仰卧附加分]三项也不能因标准分为空是返回空值,相加也会




作者: ly    时间: 2020-4-17 14:19
lingjiang 发表于 2020-4-16 13:56
现在情况是这样,三个相加充成字符连起来,没有求出和,另外,其中:[体重分值]、[肺活量分值]、[立定跳远 ...

还没完全看明白
大致理解为:如果6个字段的记录中只要有一个为空值,则合计为空(注意是空不是0,如果是为0,则iif都可省略了!)
  1. 标准分: IIf((-([体重分值]<>"")*-([肺活量分值]<>"")*-([立定跳远分值]<>"")*-([坐位体前屈分值]<>"")*-([800米/1000米分值]<>"")*-([引体仰卧分值]<>""))=0,"",Nz([体重分值])*1+Nz([肺活量分值])*1+Nz([立定跳远分值])*1+Nz([坐位体前屈分值])*1+Nz([800米/1000米分值])*1+Nz([引体仰卧分值])*1)
复制代码

作者: lingjiang    时间: 2020-4-17 21:30
是这意思
作者: lingjiang    时间: 2020-4-17 21:31
怕几天老被空值烦
作者: lingjiang    时间: 2020-4-17 23:04
本帖最后由 lingjiang 于 2020-4-17 23:17 编辑

其实是这样讲,[肺活量分值]等是由前表体质评分表通过
肺活量分数2: IIf(IsNull([肺活量]),"",IIf([肺活量]>DMax("指数下限","肺活量评分","年级 & 性别='" & [年级] & [性别2] & "'"),DLookUp("得分","肺活量评分","年级 & 性别='" & [年级] & [性别2] & "' and 指数下限=" & DMax("指数下限","肺活量评分","年级 & 性别='" & [年级] & [性别2] & "'")),DLookUp("得分","肺活量评分","年级 & 性别='" & [年级] & [性别2] & "' and 指数下限=" & DMax("指数下限","肺活量评分","年级 & 性别='" & [年级] & [性别2] & "' and 指数下限<=" & [肺活量]))))这样域函数从对应的体重指数评分表查值得来的,
其实讲白话就是比如,比如一个人肺活量为4910,是男的,大一的,那他的值就是就4800到4920之间就是90分,然后它在标准分中占的比例是15%,标准分是由如体重指数分数分值等,都是乘以相应的比例分来的,然后这些分值再加起来就是标准分,我在查表求分的语句中设了一条件IIf(IsNull([测试项目]),"", 大意是如果前面成绩是空白的,得分栏就空白,不然的话就会显示#错误,不好浏览。然后再算标准分时就想设定这几个值如果哪个空的就不能计算,返回为空。试了用Nz不行,后来用了IIf([项目]="","",)连写五个,然后才写了一句将([体重分值]+[肺活量分值]+[立定跳远分值])+([坐位体前屈分值]+[800米/1000米分值])+[引体仰卧分值])才解决问题,这应是最下策的解决方法,因为我感觉IsNull([肺活量]),"",后肺活量分数中应是有空字串这个值的,不然不会提示错误。
到了算总分时又返过来了,因引体仰卧加分和1000米/800加分是要一齐和标准分相加才能形成,我又因IsNull([xx]),"",   倒了,加不起来,一加就出错,还是空字串问题,Nz用了N次都不行,IIf([项目]="","",)也不管用了,其实也有解决办法IsNull([xx]),"",   不用""用0就解决了。但是因为要做报表,总不能分数全用0解决吧,所以现在的问题就来了
1.[体重分值]、[肺活量分值]、[立定跳远分值])、([坐位体前屈分值]、[800米/1000米分值])、[引体仰卧分值]如果一个为空值,标准分为空
2.如果[标准分]不为空,[800米/1000米附加分]、[引体仰卧附加分]两项如果都不空,就和标准分相加,求出总分
如果一项为空,则另一项不为空的和标准分相加求出总分
如果两项都为空标准分就直接显到总分上
现在又发现新问题,会提示查询过于复杂的错误,总之空值伤人。不知有人能解决吗





作者: ly    时间: 2020-4-18 09:49
本帖最后由 ly 于 2020-4-18 10:30 编辑
lingjiang 发表于 2020-4-17 23:04
其实是这样讲,[肺活量分值]等是由前表体质评分表通过
肺活量分数2: IIf(IsNull([肺活量]),"",IIf([肺活量 ...

建议继续学习消化@roych老师的课程,优化自己的基础表。
比如:表[总分评分]的成绩和年级有关系吗?

查询是筛选记录的地方,报表才是输出的地方,所以不要在查询阶段去纠结显示的是空值还是0。
表中的0值想在报表中不显示出来,可以在这个报表的控件记录源加个条件判断。
比如:iif([字段]=0,null,[字段])

补充:发现有个更简易的方法,就是设置这个报表的控件的格式为:#;(#),不许要iif了。


作者: lingjiang    时间: 2020-4-18 16:52
xiexie,我继续学习




欢迎光临 Office中国论坛/Access中国论坛 (http://www.office-cn.net/) Powered by Discuz! X3.3