2014-09-22 46 views
1

我有如下表:
增加有限行数SQL

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开始。

有没有人有一个想法如何做到这一点?
谢谢。

+0

我可以看到从ROWNUMBER 1开始针对每个的GroupID。你想限制每个GroupID为24吗? – Raj 2014-09-22 08:36:53

+0

@Raj,是,每组ID – Haminteu 2014-09-22 08:44:58

回答

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减去我行号开始-1从开始0

+1

嗨,谢谢。是的,这是逻辑。 – Haminteu 2014-09-22 08:48:35

+0

如果你想我可以发送你的sql代码完整的选择查询 – 2014-09-22 08:49:23

+0

是的,为什么不...只是编辑你的答案队友。欣赏。 – Haminteu 2014-09-22 08:49:55

0

您可以使用解码函数在SQL中实现此功能。

选择ID,组ID,日期,数值,解码器(MOD(ROWNUM,24),0,24,MOD(ROWNUM:一旦到达ROWNUMBER 25,ROWNUMBER再次从1

尝试执行以下查询开始,24))从表

0

mod_Val此代码可以是有益的

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

但必须仔细阅读问题 – 2014-11-27 08:53:25