比如我有如下的表
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来做,但想了半天貌似没有简便方法.
求大神指点

解决方案 »

  1.   

    update table
    set newcol=id%3可行不?
      

  2.   

    我是这么想的,靠rownumber % 3得到一个分组依据的列,就是111222333,然后在rownumber partition 新列,得到123123123,但感觉这样会不会很麻烦
      

  3.   

    rownum好像不是一个非常可靠的值,既然你ID字段和newcol字段有这种固定的映射关系为什么不用?
    好像当你用不同的方法去查询数据时,rownum并不是固定的,比如我如果查询ID>5,那么rwonum=1的数据应该是ID为6的行
      

  4.   

    楼上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