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

时间:2016-11-11 15:05:09

标签: sql ms-access group-by row-number

我有一张这样的表:

Tabel1

现在我希望分组BY Field1,这并不难。在此之后,我想为每个组添加一个行号。最后......这必须在Access中完成,当然稍微不同。所以这就是我的代码:

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

Result

所以,这很好用,但现在我不能把它分组。我怎么组合它?

1 个答案:

答案 0 :(得分:0)

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

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;

从这里开始,您可以像查询的输出一样进行连接。我不知道你真正想要分组的是什么,但这是一个例子:

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

理论上你可以在一个查询中执行此操作,但出于可读性/可维护性的考虑,我建议你将它们分开。以下是输出的示例:

enter image description here