如何在Access中添加行号和GROUP BY?

How to add Row Numbers and GROUP BY in Access?

我有一个 table 这样的:

现在我想对 Field1 进行 GROUP BY,这并不难。在此之后,我想为每个组添加一个行号。最后.. 这必须在 Access 中完成,当然略有不同。所以这是我的代码:

SELECT A.*, (SELECT COUNT(*) FROM Tabel1 WHERE A.ID>=ID) AS RowNum
FROM Tabel1 AS A
ORDER BY A.ID;

所以,这很好用,但现在我无法对其进行分组。我该如何分组?

您可以将整个查询包装在一个子查询中:

select
  B.*
from
( SELECT
    A.*,
   (SELECT COUNT(*) FROM Tabel1 WHERE A.ID>=ID) AS RowNum
  FROM Tabel1 AS A
) as B
ORDER BY B.ID;

从这里,您可以像查询输出一样进行联接 table。我不知道你到底想分组什么,但这里有一个例子:

select
  B.Field1, count (*) as count, max (B.RowNum) as max_row
from
( SELECT
    A.*,
   (SELECT COUNT(*) FROM Tabel1 WHERE A.ID>=ID) AS RowNum
  FROM Tabel1 AS A
) as B
group by
  b.Field1

-- 编辑 2016 年 11 月 14 日 --

我想我现在明白了。在这种情况下,首先构建一个查询来处理您的分组。这只是一个例子:

SELECT Field1, min (Id) as min_id, max (id) as max_id
FROM Table1
group by Field1

为了示例的目的,将此查询命名为 Table1_Summary

现在,在您的新查询中,您将以与示例完全相同的方式引用 Table1_Summary:

SELECT 
  t.*,
  (select count (*) from Table1_Summary t2 where t.Field1 >= t2.Field1) as RowNum
FROM Table1_Summary t

理论上您可以在单个查询中执行此操作,但为了 readability/maintainability 的缘故,我建议您将它们分开。这是输出示例: