如何在SELECT查询中包含“订单”或“索引”列?

时间:2013-08-17 11:07:38

标签: c# sql ms-access select aggregate-functions

我正在使用 Access SQL 。我想在我的查询中添加一个column,对于每条记录都像row number,但由于我使用的是聚合函数,因此结果本身并不是id。是否有任何函数可以为此生成一些行号?甚至像自动编号索引或只是订单。所以我的伪SQL语法就像:

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

我猜想如果我使用自动编号列为此查询创建临时表可能会更好,但我不知道如何做到这一点。

1 个答案:

答案 0 :(得分:3)

如果将GROUP BY SQL保存为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样本数据(作为文本,而不是屏幕截图),并根据该样本数据向我们显示您想要的输出。

请注意,相关子查询要求db引擎分别为父查询的结果集的每一行运行该子查询。这对于庞大的数据集来说将是一个巨大的性能挑战。但是,如果您的数据集足够小,则可以容忍执行影响,或者甚至可能无法察觉。