添加有限的行号SQL

时间:2014-09-22 08:30:56

标签: sql sql-server sql-server-2008

我有下表:

ID   GroupID   Date         Value
1    A         2014-06-01   20
2    A         2014-06-02   21
3    A         2014-06-03   22
4    B         2014-06-01   50
5    B         2014-06-02   76
6    A         2014-06-04   25
7    C         2014-06-01   70
8    A         2014-06-05   29

我希望在SQL VIEW中得到以下结果:

ID   GroupID   Date         Value     RowNumber
1    A         2014-06-01   20        1
2    A         2014-06-02   21        2
3    A         2014-06-03   22        3
4    B         2014-06-01   50        1
5    B         2014-06-02   76        2
6    A         2014-06-04   25        4
7    C         2014-06-01   70        1
8    A         2014-06-05   29        5

但是,我想将RowNumber字段限制为24.如果数字达到24,那么它将再次从1开始。

有没有人知道如何做到这一点?
谢谢。

3 个答案:

答案 0 :(得分:5)

您只需将RowNumber列值设置为RowNumber%24 + 1,然后将行号设置为24,然后从1开始

SELECT (ROW_NUMBER() OVER 
                     (PARTITION BY GroupID  ORDER BY ID)
                      -1)%24+1 as RowNumber,
* FROM Table

因为行号从1 i开始减去行号-1从0开始

答案 1 :(得分:0)

您可以使用SQL中提供的解码功能来实现此目的。一旦RowNumber达到25,RowNumber将从1开始。

尝试执行以下查询:

从表中选择ID,GroupID,Date,Value,decode(mod(rownum,24),0,24,mod(rownum,24))mod_Val

答案 2 :(得分:0)

此代码可能会有所帮助

with std as (select *,row_number() over(partition by groupid order by groupid,id) as RowNumber
from table1)
select * from std order by id