【问题标题】:Create row_num column in Access SQL, order by field firstAccess SQL中创建row_num列,先按字段排序
【发布时间】:2017-02-17 01:39:03
【问题描述】:

我正在尝试编写一个简单的查询,该查询将获取一个表,按该表的日期字段排序并添加一个包含行数的列。这是 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 字段的值从一行到下一行的差异。因此,我尝试将我发现的概念(创建一个包含 A.ID > ID 的 dcount 列)应用于日期字段,但随后我得到了每个日期的计数。但我需要计算每个日期,即使可能有多个相同的日期。

提前致谢

【问题讨论】:

  • 您可以参考this answer 获取DCount function
  • 谢谢,但正如我所提到的,这个 Dcount 解决方案适用于 ID,但不适用于日期,因为可以有多个相同的日期。

标签: sql ms-access


【解决方案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;

【讨论】:

  • 这适用于两个相同的日期吗?也许需要对 ID 的引用?
  • 这只会给我每个新日期的新行号。但无论日期如何,我都需要为每一行设置一个新的行号。
  • @Tyler 。 . .我注意到样本数据确实有重复的日期,所以我更新了答案。
  • 太完美了!谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-12-15
  • 1970-01-01
  • 2011-09-20
  • 1970-01-01
  • 2020-09-03
  • 2023-03-26
相关资源
最近更新 更多