我有两列数据需要平均值,或者如果其中一个单元格为零,则取非零值。
SELECT ID, IIF((A+B)=A, A, IIF((A+B)=B, B, (A+B)/2)) AS AVE_AB <br/>
FROM Data;
有没有办法使此代码更有效?我还有另外25个变量可以执行此操作,并且如果可能的话,希望使我的代码更高效,更短。
如果要构建甚至需要稍微复杂的表达式逻辑的访问查询,并且必须将该逻辑重用于许多对列,则最好创建一个自定义VBA函数(也称为用户定义函数或UDF)来执行此操作工作。例如,这并不难。这种方法具有几个优点,其中最重要的是:
按照Excel的= AverageIF()函数(Access没有内置此函数)的示例,您可以按照以下步骤在Visual Basic中创建一个新模块:
Public Function AverageIFNotZero(columnA, columnB)
If columnA = 0 Then
AverageIFNotZero = columnB
Else
If columnB = 0 Then
AverageIFNotZero = columnA
Else
AverageIFNotZero = (columnA + columnB) / 2
End If
End If
End Function
然后,您可以像这样在查询设计器或SQL视图中轻松地重用它:
SELECT ID, AverageIFNotZero(A,B) AS AVE_AB, AverageIFNotZero(C,D) AS AVE_CD FROM Data;
如果您以前从未使用过VBA,请按照以下步骤在Access 2013中设置此简单示例:
Option Compare Database
和和/或Option Explicit
。单击您所看到的代码下方,然后键入或粘贴上面以开头的代码示例中的所有内容Public Function
。本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句