在Access SQL中创建row_num列,首先按字段排序

时间:2017-02-17 01:39:03

标签: sql ms-access

我正在尝试编写一个简单的查询,该查询将采用一个表,按该表的日期字段排序并添加包含行计数的列。这是T-SQL中最简单的事情,但Access不支持Row_Num()函数。

所以,假设我的“日期”表格如下:

ID       Date
1        02/01/2017
2        02/03/2017
3        01/27/2017
4        02/05/2017
5        02/01/2017
6        02/03/2017

我的Access查询结果应如下所示:

ID       Date          RowNum
3        01/27/2017    1
1        02/01/2017    2
5        02/01/2017    3
2        02/03/2017    4
6        02/03/2017    5
4        02/05/2017    6

我试图找到这个问题的答案,但我发现的所有答案似乎都依赖于从一行到下一行的ID字段值的差异。然后我尝试将我找到的概念(创建一个带有dcount的列,其中A.ID> ID)应用到Date字段,但随后我得到了每个日期的计数。但是我需要计算每个日期,即使可能有多个日期是相同的。

提前致谢

1 个答案:

答案 0 :(得分:1)

一种方法是相关子查询:

select d.*,
       (select count(*) from dates as d2 where d2.date <= d.date) as rownum
from dates as d
order by d.date;

这不是很有效,但在一张小桌子上它确实可以达到你想要的效果。但最简单的方法可能是在表格上使用光标。

这假设日期不同,如问题中的示例数据。

编辑:

仔细观察,日期并不是唯一的。所以你可以使用多个条件:

select d.*,
       (select count(*)
        from dates as d2
        where d2.date < d.date or
              (d2.date = d.date and d2.id <= d.id)
       ) as rownum
from dates as d
order by d.date;