设为首页收藏本站Access中国

Office中国论坛/Access中国论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

返回列表 发新帖
查看: 2420|回复: 8
打印 上一主题 下一主题

[模块/函数] 问为何这个IIF查旬解决不了

[复制链接]
跳转到指定楼层
1#
发表于 2020-4-16 11:40:59 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我想对各取值分数进行合计,结果发现空值不能处理,我的计划是如果黑框中的各个值:[体重分值]+[肺活量分值]+[立定跳远分值])+([坐位体前屈分值]+[800米/1000米分值])+[引体仰卧分值]不是空的就相加得出总和,如果一个多个为空就显示为空值,不计算。然后和画圈的和标准分相加得出总分,它们是反过来如果空值就化为0和标准分相加,如果标准分为空就不相加:

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

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 分享淘帖 订阅订阅

点击这里给我发消息

2#
发表于 2020-4-16 12:22:27 | 只看该作者
【来自Office中国机器人】加NZ函数处理
3#
 楼主| 发表于 2020-4-16 13:56:20 | 只看该作者
本帖最后由 lingjiang 于 2020-4-16 14:02 编辑

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



本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
4#
发表于 2020-4-17 14:19:27 | 只看该作者
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)
复制代码
5#
 楼主| 发表于 2020-4-17 21:30:07 | 只看该作者
是这意思
回复

使用道具 举报

6#
 楼主| 发表于 2020-4-17 21:31:06 | 只看该作者
怕几天老被空值烦
7#
 楼主| 发表于 2020-4-17 23:04:44 | 只看该作者
本帖最后由 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米附加分]、[引体仰卧附加分]两项如果都不空,就和标准分相加,求出总分
如果一项为空,则另一项不为空的和标准分相加求出总分
如果两项都为空标准分就直接显到总分上
现在又发现新问题,会提示查询过于复杂的错误,总之空值伤人。不知有人能解决吗




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

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

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

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

9#
 楼主| 发表于 2020-4-18 16:52:18 | 只看该作者
xiexie,我继续学习
您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|站长邮箱|小黑屋|手机版|Office中国/Access中国 ( 粤ICP备10043721号-1 )  

GMT+8, 2024-5-2 09:12 , Processed in 0.758345 second(s), 33 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表