2013-08-23 15 views
2

重复的实例的数量使用Access 2010中查询也要算和增加的这个记录

所以,如果我有一个表

COL1 
A  
B  
A  
C  
A  

和运行查询我会得到在COL2输出其中'A'被重复三次并且其COL2值依次递增。

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

您的表是否有ID列? SQL表本质上是无序的,所以您需要另一列来指定排序。 –

+0

它可以很容易地有一个id我已经从简单的例子中删除了这个例子 - 所以如果它有一个ID col任何想法? – megaSteve4

回答

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 

COL2aCOL2b显示2种方法来实现相同的结果。 DCount是Access特定的,并且需要围绕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;