日期:2014-05-17  浏览次数:20735 次

如何增加一列循环数字的辅助列
比如我有如下的表
ID    NAME
1     A
2     B
3     C
4     D
5     E
6     F
7     G
...
...
现在要增加一列辅助列,以指定的数字无限循环,比如指定是3
结果如下,就是原表不动,增加一列
ID    NAME   newcol
1     A      1
2     B      2
3     C      3
4     D      1
5     E      2
6     F      3
7     G      1
8     H      2
...
...
感觉要用rownumber来做,但想了半天貌似没有简便方法.
求大神指点

------解决方案--------------------
update table
set newcol=id%3
可行不?
------解决方案--------------------
楼上id%3 只能生成0,1,2的值。顺便提下,oracle中取余是MOD。当然rownu是看你的数据存储顺序的,假如你不需要考虑这个顺序问题的话,如下SQL:

SQL> update tab_simo set age = (case when mod(rownum,3)=0 then 3 else mod(rownum,3) end);
 
8 rows updated
 
SQL> select * from tab_simo;
 
        ID NAME           AGE
---------- ------- ----------
         1 A                1
         2 B                2
         3 C                3
         4 D                1
         5 E                2
         6 F                3
         7 G                1
         8 H                2
 
8 rows selected

------解决方案--------------------
decode(MOD(a.id,3),0,3,MOD(a.id,3))