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

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

使用 Access 2010。

如果我有一张 table

COL1 
A    
B    
A    
C    
A    

运行查询后,我会在 COL2 中得到输出,其中“A”重复三次,并且其 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

COL2aCOL2b 显示了实现相同结果的 2 种方法。 DCount是特定于 Access 的,并且需要在 m.COL1 文本值周围加上引号。第二种方法,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;

关于sql - 计算并增加该记录的重复实例数的查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18401710/

相关文章:

ms-access - Ms Access前端,PostgreSQL后端高效INSERT INTO ... RETURNING ...语句

java - Android Room Java 内连接与计数

java - Elasticsearch 嵌套聚合

SQL Server 2008 R2 - 计算引用上一行

mysql - 如何返回等于字符串的所有子字符串的行

从 MDB 到 WebApp 的 Java 集成

ms-access - 微软 Access : How to open form via command button based on current record?

MySQL 计算表中两个日期之间的星期几

PHP、MySQL CSV 导入 - 您会如何执行此操作?

java - PostgreSQL 9 JDBC 驱动程序为存储过程返回不正确的元数据