Microsoft Access查询重复ROW_NUMBER

时间:2016-08-26 21:37:32

标签: sql ms-access

显然,在MS Access中有很多关于ROW_NUMBER的问题,通常的反应是它不存在,而是使用COUNT(*)创建类似的东西。不幸的是,这样做并没有给我我需要的结果。

我的数据如下:

 RID | QID
 ---------
 1   | 1
 1   | 2
 1   | 3
 1   | 3
 2   | 1
 2   | 2
 2   | 2

我想要的是对RID和QID的唯一计数,以便我的查询输出看起来像

 RID | QID | SeqID
 ------------------
 1   | 1   | 1
 1   | 2   | 1
 1   | 3   | 1
 1   | 3   | 2
 2   | 1   | 1
 2   | 2   | 1
 2   | 2   | 2

使用COUNT(*)我得到:

 RID | QID | SeqID
 ------------------
 1   | 1   | 1
 1   | 2   | 2
 1   | 3   | 3
 1   | 3   | 3
 2   | 1   | 1
 2   | 2   | 2
 2   | 2   | 2

我目前的查询是:

 SELECT
      d.RID
      ,d.QID
      ,(SELECT
            COUNT(*)
        FROM
            Data as d2
        WHERE
            d2.RID = d.RID
            AND d2.QID < d.QID) + 1 AS SeqID
 FROM 
      Data as d
 ORDER BY
      d.RID
      ,d.QID

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:3)

正如Matt的评论暗示的那样,使这项工作成功的唯一方法就是你的表中有一些列可以唯一地标识每一行。

根据您发布的内容,您似乎没有。如果是这种情况,请考虑添加可用于此目的的新自动增量数字列。让我们假装您调用新列id

有了这个,以下查询将起作用:

select t.rid, t.qid,
       (select count(*)
          from data t2
         where t2.rid = t.rid
           and t2.qid = t.qid
           and t2.id <= t.id) as SeqID
from data t
order by t.rid, t.qid

SQLFiddle Demo