查询将计算并增加该记录的重复实例数

时间:2013-08-23 11:28:02

标签: sql ms-access count ms-access-2010 duplicate-data

使用Access 2010。

所以,如果我有一张桌子

COL1 
A    
B    
A    
C    
A    

并运行查询我将得到COL2中的输出,其中'A'重复三次,其COL2值又递增。

COL1 | COL2
A    | 1
B    | 1
A    | 2
C    | 1
A    | 3

1 个答案:

答案 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;