将百分比列添加到MS Access Query

Sti*_*lev 1 sql ms-access formula percentage

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

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


寻找我使用百分比的公式为:([产品的总Q]/[全部产品总计])*100,但是当我尝试使用表达式生成器(因为我的SQL技能是基本的)在MS访问计算..

= [CountOfProcuts]/Sum([CountOfProducts])

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

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

Han*_*sUp 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;
Run Code Online (Sandbox Code Playgroud)

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

如果您需要问题示例中的最后一行,则可以UNION使用另一个返回您想要的伪造行的查询.在这个例子中,我使用了一个自定义的双表,它被设计为始终只包含一行.但是您可以替换另一个返回单行的表或查询.

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;
Run Code Online (Sandbox Code Playgroud)