1

我正在尝试添加一个列来计算 MS Access Query 中不同产品的百分比。基本上,这是我试图达到的查询结构:

产品 | 总计 | 百分比
 Prod1 | 15 | 21.13%
 产品 2 | 23 | 32.39%   
 产品3 | 33 | 46.48%   
产品 |   71 |    100%


查找我使用的百分比的公式是:([Total Q of a Product]/[Totals of all Products])*100,但是当我尝试在 MS Access 中使用表达式生成器(因为我的 SQL 技能很基础)时算了。。

= [CountOfProcuts] / Sum([CountOfProducts])

..我收到一条错误消息“不能在 GROUP BY 子句中具有聚合函数..(并且表达式放在这里)”。我还尝试了两个查询的选项:一个只计算总数,另一个使用第一个来计算百分比,但结果是一样的。

如果有人可以帮助我,我将不胜感激。

4

1 回答 1

6

您可以使用此查询获得所需输出的最后一行以外的所有内容。

SELECT
    y.Product,
    y.Total,
    Format((y.Total/sub.SumOfTotal),'#.##%') AS Percentage
FROM
    YourTable AS y,
    (
        SELECT Sum(Total) AS SumOfTotal
        FROM YourTable
    ) AS sub;

由于该查询不包含JOINorWHERE条件,因此它返回表和子查询的单行之间的交叉连接。

如果您需要问题示例中的最后一行,您可以UNION使用另一个返回您想要的虚构行的查询。在此示例中,我使用了一个自定义 Dual 表,该表旨在始终包含一行且仅包含一行。但是您可以替换另一个返回单行的表或查询。

SELECT
    y.Product,
    y.Total,
    Format((y.Total/sub.SumOfTotal),'#.##%') AS Percentage
FROM
    YourTable AS y,
    (
        SELECT Sum(Total) AS SumOfTotal
        FROM YourTable
    ) AS sub
UNION ALL
SELECT
    'Product',
    DSum('Total', 'YourTable'),
    '100%'
FROM Dual;
于 2013-10-30T21:15:46.017 回答