使用 Access 2010。
所以如果我有一张桌子
COL1
A
B
A
C
A
并运行查询,我将在 COL2 中获得输出,其中“A”重复了 3 次,并且其 COL2 值依次递增。
COL1 | COL2
A | 1
B | 1
A | 2
C | 1
A | 3
使用 Access 2010。
所以如果我有一张桌子
COL1
A
B
A
C
A
并运行查询,我将在 COL2 中获得输出,其中“A”重复了 3 次,并且其 COL2 值依次递增。
COL1 | COL2
A | 1
B | 1
A | 2
C | 1
A | 3
向表中添加一个字段。选择自动编号作为其数据类型,并将其设为表的主键。我命名了字段ID,所以我的示例数据版本看起来像这样......
ID COL1
1 A
2 B
3 A
4 C
5 A
下面的SELECT
语句返回这个结果集......
ID COL1 COL2a COL2b
1 A 1 1
2 B 1 1
3 A 2 2
4 C 1 1
5 A 3 3
COL2a和COL2b显示了 2 种方法来实现相同的结果。 DCountm.COL1
是特定于 Access 的,并且需要在文本值周围加上引号。第二种方法COL2b使用相关子查询,因此如果您愿意,可以在不同的数据库中工作。使用这种方法,您无需费心引用文本值。
这两种方法基本上都需要数据库引擎为结果集的每一行运行一个额外的查询。因此,对于一张巨大的桌子,性能将是一个问题。索引将对此有所帮助。COL1
如果还没有 索引,请添加索引。ID
已经有一个索引,因为它是主键。
如果您无法添加字段,并且该表还没有包含另一个合适的字段,那么我认为您不走运。您将无法通过 Access 查询获得所需的内容。
SELECT
m.ID,
m.COL1,
DCount(
"*",
"MyTable",
"COL1 = '" & m.COL1 & "' AND ID <= " & m.ID
) AS COL2a,
(
SELECT Count(*)
FROM MyTable AS m2
WHERE m2.COL1 = m.COL1 AND m2.ID <= m.ID
) AS COL2b
FROM MyTable2 AS m
ORDER BY m.ID;