现在表有两列:
a       b
1       1
1       1
1       2
1       3
1       3
2       1
2       1
2       1
select a,b,count(1),row_number() over(order by a) from t group by a,b  得到:
1       1    2   1
1       2    1   2
1       3    2   3
2       1    3   4
现在我想的是当b列值为3是(1       3    2   3)这条数据 的最后一列地 不是在上一行此列的基础上加一,而是加或2 得到(1       3    2   4) 而最后结果为:
1       1    2   1
1       2    1   2
1       3    2   4  (当b=3 是增加2)
2       1    3   5
row_number() over(order by a) 这个只能增加一个, 有什么办法吗??? 跪求! (最好用开窗实现)

解决方案 »

  1.   

    SQL> select a,
      2         b,
      3         ct,
      4         rn + sum(case
      5                    when b = 3 then
      6                     1
      7                    else
      8                     0
      9                  end) over(order by rownum) n
     10    from (select a, b, count(1) ct, row_number() over(order by a) rn
     11            from t
     12           group by a, b);
     
             A          B         CT          N
    ---------- ---------- ---------- ----------
             1          1          2          1
             1          2          1          2
             1          3          2          4
             2          1          3          5
     
      

  2.   

    select a, b, count(1) ct, row_number() over(order by a) rn from t  group by a, b
    有没有可能row_number() over(order by a) 换个函数能实现????