写详细点
序号     编号   处理方式
1 20041000001 串行
2 20041000001 串行
3 20041000001 并行
4 20041000001 并行
5 20041000002 并行
6 20041000002 并行
7 20041000002 串行
使用sql得到如下序号     编号   处理方式   temp
1 20041000001 串行          1
2 20041000001 串行          2
3 20041000001 并行          3
4 20041000001 并行          3
5 20041000002 并行          1 
6 20041000002 并行          1
7 20041000002 串行          2很难啊.大家帮忙啊....别不理我啊:(

解决方案 »

  1.   

    为什么非要用SQL呢生成一个临时表 写个循环加工一下里面的数据就是了
      

  2.   

    根据你给的temp字段,我觉得一点规律也没有啊
    开始是两个并行,你用了3,然后连着两个并行,你又用了1,你不是说并行用同一编号吗?
    完了之后出现串行,你又用了2,这不前面也是串行2吗,搞不清楚
      

  3.   

    temp是一个动态产生的
    而编号是表中存在需要分组的啊!
      

  4.   

    第一个写错了!不是顺序和同时
    我的意思是根据同一编号的其中的type字段的值来重新对此同一编号的重新编号,使用temp来记录.
      

  5.   

    这会儿又冒出个type字段,是“处理方式吧”?
    那编号规则呢?
    俺看不懂
      

  6.   

    对:)处理方式
    编号是进行分组的
    同一组的进行并行,串行动态排号
    并行使用同一号,串行递增,递增的顺序是按照前面的序号正序排列
    所以出现下面的
    序号     编号   处理方式   temp
    1 20041000001 串行          1    描述:串行
    2 20041000001 串行          2    描述:递增
    3 20041000001 并行          3    描述:递增
    4 20041000001 并行          3    描述:上面是并行 不变
    5 20041000001 串行          4    描述:递增
    ----------------------------------------------这是一组
    5 20041000002 并行          1    并行
    6 20041000002 并行          1    上面是并行 不变
    7 20041000002 串行          2    串行了, 递增
    -----------------------------------------------这是一组
      

  7.   

    我早就发现这个规律了 但是写成SQL真的有困难哦我想想
      

  8.   

    你用 PL/SQL 写 block 吧
      

  9.   

    可以用sql完成,不过效率不高。
    mytable( 序号,编号,处理方式)select 序号,编号,处理方式,decode(temp,0,1,temp) temp
      from (select x.序号,x.编号,x.处理方式
                 , count(decode(y.处理方式,'串行',1,0)) temp
              from mytable x, mytable y
             where x.编号=y.编号
               and x.序号>=y.序号
          group by x.序号,x.编号,x.处理方式));
      

  10.   

    09:27:56 SQL> select * from tbname;        XH BH                   ZT
    ---------- -------------------- ----------
             1 20041000001          串行
             2 20041000001          串行
             3 20041000001          并行
             4 20041000001          并行
             5 20041000002          并行
             6 20041000002          并行
             7 20041000002          串行已选择7行。已用时间:  00: 00: 00.16
      

  11.   

    09:28:08 SQL>  select xh,bh,zt,sum(flag) over(partition by bh order by xh) sflag f
    09:30:15   2  select t.*,decode(ZT||LAG,'并行并行',0,1) flag from (
    09:30:25   3  select tbname.*,lag(ZT,1,'') over(partition by bh order by xh) lag
    09:30:38   4  from tbname) t)tt;        XH BH                   ZT              SFLAG
    ---------- -------------------- ---------- ----------
             1 20041000001          串行                1
             2 20041000001          串行                2
             3 20041000001          并行                3
             4 20041000001          并行                3
             5 20041000002          并行                1
             6 20041000002          并行                1
             7 20041000002          串行                2已选择7行。已用时间:  00: 00: 00.16
    09:30:40 SQL>
      

  12.   

    bzszp(SongZip) :
      XH BH                   ZT              SFLAG
    ---------- -------------------- ---------- ----------
             1 20041000001          串行                1
             2 20041000001          串行                2
             3 20041000001          并行                3
             4 20041000001          并行                3
             5 20041000001          并行                3
             6 20041000001          并行                3
             7 20041000001          串行                4
    去掉20041000002的内容,有多个并行的时候能够支持吗?怎么感觉你的只能支持两个并行
      

  13.   

    10:09:45 SQL> select * from tbname;        XH BH                   ZT
    ---------- -------------------- ----------
             1 20041000001          串行
             2 20041000001          串行
             3 20041000001          并行
             4 20041000001          并行
             5 20041000001          并行
             6 20041000001          并行
             7 20041000001          串行已选择7行。已用时间:  00: 00: 00.15
    10:09:55 SQL>  select xh,bh,zt,sum(flag) over(partition by bh order by xh) sflag from(
    10:09:59   2  select t.*,decode(ZT||LAG,'并行并行',0,1) flag from (
    10:09:59   3  select tbname.*,lag(ZT,1,'') over(partition by bh order by xh) lag
    10:09:59   4  from tbname) t)tt;        XH BH                   ZT              SFLAG
    ---------- -------------------- ---------- ----------
             1 20041000001          串行                1
             2 20041000001          串行                2
             3 20041000001          并行                3
             4 20041000001          并行                3
             5 20041000001          并行                3
             6 20041000001          并行                3
             7 20041000001          串行                4已选择7行。已用时间:  00: 00: 00.31
    10:10:00 SQL>
      

  14.   

    版本可以解释一下lag解析函数的用法嘛,看起来你的sql是可以解决问题的,思路很不错, 呵呵!