ms-access – 聚合乘法函数

我有一张以下表格:
1    X    10
2    X    30
3    Y    5
4    Y    2
...etc

我需要把它变成:

X    300   //(10 * 30)
Y    10    //(5 * 2)

所以我实际上正在寻找一种乘法函数,我可以像sum,avg和stuff那样使用……这样的人存在吗?

例如:

select field2,**multiply**(field3)
from t
group by field2

谢谢

理想情况下,Access sql可以使用PRODUCT聚合函数,但事实并非如此.然而,我们可以通过记住我们在学校学习的对数(或不是……)来模拟它,并记住日志总和的反对数等于产品:
SELECT field2,EXP(Sum(LOG(Field3))) AS ProductOfField3
FROM t
GROUP BY Field2

请注意,如果存在任何零值,则真正的PRODUCT函数将仅为组返回0,则此解决方案将失败,因此请注意这一点.此外,如果存在任何负值,此方法将不起作用.

要处理零,我们可以这样做:

SELECT
    field2,EXP(Sum(LOG(IIf(Field3 = 0,1,Field3)))) AS ProductOfField3,MIN(ABS(Field3)) AS MinOfAbsField3
FROM t
GROUP BY Field2

然后忽略MinOfAbsField3为零的任何行的ProductOfField3值(因为这表示一个包含零的组,因此’true’产品应为0)

为了处理负值,我们可以进一步做到这一点:

SELECT
    field2,ABS(Field3))))) AS ProductOfField3,MIN(ABS(Field3)) AS MinOfAbsField3,SUM(IIf(Field3 < 0,0)) AS SumOfNegativeIndicator
FROM t
GROUP BY Field2

并使用以下规则解释结果:

>如果MinOfAbsField3为零,则忽略该行的ProductOfField3 – 产品为零>否则,给定行的必需答案是ProductOfField3,如果SumOfNegativeIndicator在该行中为奇数则否定

相关文章

迭代器模式(Iterator)迭代器模式(Iterator)[Cursor]意图...
高性能IO模型浅析服务器端编程经常需要构造高性能的IO模型,...
策略模式(Strategy)策略模式(Strategy)[Policy]意图:定...
访问者模式(Visitor)访问者模式(Visitor)意图:表示一个...
命令模式(Command)命令模式(Command)[Action/Transactio...
生成器模式(Builder)生成器模式(Builder)意图:将一个对...