表数据:
rowid       dataid        data
1              1           A
2              1           A
3              2           B
4              2           B
5              3           A
6              3           A
7              4           D
8              4           D
9              5           B
10             5           B
要求按照rowid顺序排列,对data进行分组,每组编一个序号dataid,
关键在于data中相等的地方不一定是同一组序号,完全按照rowid顺序来,最终要求实现一个sql语句来更新dataid

解决方案 »

  1.   

    你这个题目规律不清楚,DATA倒底是怎么分组的,ROWID好编,DATAID从你给的数据来看,只是相邻的相等算做一组
      

  2.   

    差不多就是按照相邻行的值来分组,比如表格中的A值,它的dataid就是不一样的
      

  3.   

    分析:判断当前行的值与上一行值是否相等,标志成count_flg,那么count_flg变化一次应该把dataid递增1。方案:采用子查询虚拟出count_flg列(data等于data2时记为0,不等于时记为1),然后根据count_flg的值来算出所在行的dataid 。   提示:比如第4行的dataid应该等于前4行的count_flg的总和,即(1+0+1+0) = 2
            同理第5行的dataid应该等于前5行的count_flg的总和,即(1+0+1+0+1) = 3  依次类推。
    rowid       dataid        data     data2    count_flg
    1              1           A                 1
    2              1           A       A         0
    3              2           B     A         1
    4              2           B     B         0
    5              3           A     B         1
    6              3           A     A         0
    7              4           D     A         1
    8              4           D     D         0
    9              5           B     D         1
    10             5           B     B         0
    注:这里面的data2列是data列向下挪一行之后的值SQL文如下:
    UPDATE table t6 
    SET    t6.dataid =       (select t5.data_id
           from 
                 (select t4.rowid
                       ,(select SUM(t3.count_flg)
                         from   
                              (
                              select t1.rowid 
                                    ,t1.data AS data
                                    ,t2.data AS data2
                                    ,DECODE(t1.data, t2.data, 0, 1) AS count_flg
                              from   table t1
                                     table t2
                             where  t1.rowid = (t2.rowid + 1)(+)
                              ) t3
                         where t3.rowid <= t4.rowid) AS data_id
                from table t4) t5
           where t5.rowid = t6.rowid)仅供参考!
      

  4.   

    rowid       dataid        data     data2    count_flg 
    1              1           A       —         1 
    2              1           A       A         0 
    3              2           B       A         1 
    4              2           B       B         0 
    5              3           A       B         1 
    6              3           A       A         0 
    7              4           D       A         1 
    8              4           D       D         0 
    9              5           B       D         1 
    10             5           B       B         0