【问题标题】:Oracle SQL row counter with restarting incremental具有重新启动增量的 Oracle SQL 行计数器
【发布时间】:2020-09-08 14:11:57
【问题描述】:

我想用 Oracle SQL 创建一个行计数器。这个行计数器应该从 1 开始到 5,然后应该从 1 重新开始。

喜欢:

ORDER, ROW_COUNTER
-----   -----------
ORDER1,1
ORDER2,2
ORDER3,3
ORDER4,4
ORDER5,5
ORDER6,1
ORDER7,2
ORDER8,3
ORDER9,4
ORDER10,5
ORDER11,1
ect...

你有什么想法吗?

【问题讨论】:

  • 你有指定表中行顺序的列吗?

标签: sql oracle window-functions


【解决方案1】:

使用row_number() 和算术:

select 
    order_no, 
    1 + mod(row_number() over(order by order_no) - 1, 5) row_counter
from mytable

这假定表的第一列可用于对记录进行排序,尽管使用比字符串列更合理的东西可能更有意义(例如自动增量列)。

旁注:order 是 SQL 语言关键字(如:order by),因此不是列名的好选择。我在查询中将其重命名为order_no

【讨论】:

  • 谢谢!是的,我使用了一个虚拟列名。但这正是我想要的!
【解决方案2】:

SQL 表代表无序 集合。没有排序,除非列指定排序。

但基本思想是使用row_number()rownum 和一些算术:

select t.*,
       1 + mod(rownum - 1, 5)
from t;

注意:这个结果不是稳定的;表格可以按任何顺序读取。

【讨论】:

    猜你喜欢
    • 2023-02-22
    • 1970-01-01
    • 1970-01-01
    • 2016-10-29
    • 1970-01-01
    • 2017-03-24
    • 2015-12-30
    • 2021-08-10
    • 1970-01-01
    相关资源
    最近更新 更多