使用Access 2010。
所以,如果我有一张桌子
COL1
A
B
A
C
A
并运行查询我将得到COL2中的输出,其中'A'重复三次,其COL2值又递增。
COL1 | COL2
A | 1
B | 1
A | 2
C | 1
A | 3
答案 0 :(得分:3)
在表格中添加字段。选择AutoNumber作为其数据类型,并将其作为表的主键。我将字段命名为 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种方法。 DCount是特定于访问权限的,并且m.COL1
文本值周围需要引号。第二种方法 COL2b 使用相关子查询,因此如果您选择,可以在不同的数据库中工作。使用这种方法,您不需要为引用文本值而烦恼。
这两种方法基本上都要求db引擎为结果集的每一行运行一个额外的查询。因此,如果有一张巨大的桌子,性能将成为一个问题。索引将有助于那里。如果没有索引,请在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;