1

我正在使用Access SQL。我想在column我的查询中添加一个类似于row number每条记录的查询,但是因为我使用的是聚合函数,所以结果本身没有 id。有没有为此生成一些行号的函数?甚至像Autonumberindex或只是order。所以我的虚拟 SQL 语法是这样的:

SELECT [wanted autonumber column], product,Sum(amount) FROM Invoices_Items GROUP BY product

我猜想如果我为此查询创建一个带有自动编号列的临时表可能会很好,但我不知道该怎么做。

4

1 回答 1

3

如果将GROUP BYSQL 保存为 Access 中的命名查询,则可以将其用作另一个SELECT语句的数据源,该语句使用相关子查询生成行号。

因此,将此 SQL 保存为qryInvoices_Items1 ...

SELECT i.product, Sum(i.amount) AS SumOfamount
FROM Invoices_Items AS i
GROUP BY i.product;

此查询将添加一个动态行号 --- 如果基础Invoices_Items数据发生变化,给定产品的行号可能与下一次运行不同。

SELECT
    (
        SELECT Count(*)
        FROM qryInvoices_Items1 AS q2
        WHERE q2.product <= q1.product
    ) AS row_number,
    q1.product,
    q1.SumOfamount
FROM qryInvoices_Items1 AS q1;

我在 Access 2007 中测试了该 SQL,它返回了我认为您正在寻找的结果。但是,如果我对这一点有误,请Invoices_Items在您的问题中包含示例数据(作为文本,而不是屏幕截图),并根据该示例数据向我们展示您想要的输出。

请注意,相关子查询要求数据库引擎为父查询结果集的每一行单独运行该子查询。对于庞大的数据集,这将是一个巨大的性能挑战。但是,如果您的数据集足够小,则性能影响可能是可以容忍的,甚至可能不明显。

于 2013-08-17T14:40:48.180 回答