以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  表达式问题  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=10281)

--  作者:实话实说
--  发布时间:2011/5/28 7:34:00
--  表达式问题

谁能帮忙列一个带除法的表达式:差异率 = 差异 / 库存数,要求清零处理。建议狐爸加入帮助。


--  作者:hhbb
--  发布时间:2011/5/28 11:02:00
--  

表达式不计算?


其中总分列的计算表达式为:

[语文] + [数学] + [英语] + [物理] + [化学]

现在的问题是,必须输入每一科的成绩,总分列的内容才会计算得出,例如第一个同学“陈成进”,因为没有参加英语考试,英语成绩为空,导致他的总分为空,当然如果英语成绩输入0,总分能正常计算得出,但是零分和没有参加考试是有区别的。显然如果有办法让没有输入成绩的科目,作为零参与计算,那么问题就很好解决。
为此我们将总分列的计算表达式修改为:

IsNull([语文],0) + IsNull([数学],0) + IsNull([英语],0) + IsNull([物理],0) + ISNull([化学],0)

IsNull函数我们前面已经介绍过,在这里用于判断某一科目的成绩是否为空,如果为空,则返回0,否则返回该科目的成绩。


关于空值

表达式用Null表示空值,例如将折扣列的表达式设为:

IIF([数量] > 1000, 0.1, Null)

意思是:如果数量大于1000,折扣设为0.1,否则无折扣。

可以用 Is Null语句判断某列内容是否为空。

例如在订单表中,金额列的公式可以设为:

IIf([折扣] Is Null, [数量] * [单价], [数量] * [单价] * (1 - [折扣]))

意思是,如果折扣列没有输入内容,那么金额等于:

[数量] * [单价]

如果已经输入折扣,那么金额等于:

[数量] * [单价] * (1 - [折扣])

实际上,上面的公式用ISNULL函数来编写更为简单:

[数量] * [单价] * (1 - ISNULL([折扣], 0))

但是有的时候,我们是没有办法用ISNULL函数的,只能用Is Null语句,例如使用表达式筛选时,需要从订单表中筛选出折扣为空的行,那么筛选表达式为:

[折扣] Is Null

关于筛选,会有专门的章节讲述。

ISNULL函数可以返回列的值,所以多用于计算,而Is Null语句返回一个逻辑值,所以多用于条件筛选,关于Is Null语句的实际应用,我们将在开发指南中接触到。

如果要判断内容是否不为空,可以加上Not关键词,例如:

[折扣] Is Not Null


--  作者:实话实说
--  发布时间:2011/5/28 11:17:00
--  

帮助我看过,那都是加减计算,除法就麻烦点,要嵌套分母不能为零的条件。这样一个简单的除法就有好几个条件要考虑:清零;空值;除法分母不能为零等。请帮助写一下1楼的除法代码,我测试一下看能否满足我的要求。


--  作者:hhbb
--  发布时间:2011/5/28 11:52:00
--  
无非是多作些判断罢了

IIF([第二列] =0 or [第一列] /[第二列]  =0,null,[第一列] /[第二列])