向 MS Access Query 添加百分比列

Posted

技术标签:

【中文标题】向 MS Access Query 添加百分比列【英文标题】:Adding a percent column to MS Access Query 【发布时间】:2013-10-30 19:52:58 【问题描述】:

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

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

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

= [CountOfProcuts] / Sum([CountOfProducts])

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

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

【问题讨论】:

发布您从 builder 生成的 SQL 代码 @EugenHalca,您是如何在 2 分钟前将 OP 代码作为评论添加的? 【参考方案1】:

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

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;

由于该查询不包含JOINWHERE 条件,它在表和子查询的单行之间返回cross join。

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

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;

【讨论】:

哈。做得好。我正要发布同样的内容,除了:(1) 我打算全力以赴并使用“笛卡尔积”这个词,(2) 我是将百分比保留为分数,并且 (3) 我将放弃整个“最终总计”行。我对 (2) 和 (3) 的理由是它们应该只是数据呈现的一部分(例如在报告上),而不是数据本身。 谢谢。 (1) 我今天有点生气。 (2)(3) 是的,我也是。但有时他们仍然想要他们想要的东西。 :-) 答案基于判断调用,而另一次我可能会做出不同的回答……也许更接近您未提交的答案。

以上是关于向 MS Access Query 添加百分比列的主要内容,如果未能解决你的问题,请参考以下文章

基于筛选查询的MS Access查询

使用 SQL 向 MS Access 中的多个表添加列

MS-ACCESS - 在插入之前/之后插入/更新触发器需要

MS-Access 计算报告中已完成任务的百分比

在 MS ACCESS 中查找完成的字段百分比

MS Access - 根据百分比随机选择记录