table_a 表中有2个字段.  col_num,col_art.字段值如下 col_num      col_art 
----------------------- 
20091121        0 
20091121        0 
20091121        0 
20091122        0 
20091122        1 
20091122        0 
20091123        1 
20091123        0 
20091123        2 从上面的结果中很容易看出 20091121 的为一组. 
判断col_art有重复的就让它加1. 最终结果 col_num      col_art 
----------------------- 
20091121        0 
20091121        1 
20091121        2 
20091122        0 
20091122        1 
20091122        2 
20091123        1 
20091123        0 
20091123        2 
解决 sql  
select col_num , row_number() over (partition by col_num order by col_num)-1 from table_a 其中的 row_number() over (partition by col_num order by col_num)-1 没有理解麻烦高手们给解释下  谢谢!

解决方案 »

  1.   

    分析函数row_number() over()
      

  2.   

    row_number() over (partition by col_num order by col_num)-1 这是个分析函数 
    表示按col_num分组
    再按col_num排序,然后编号
      

  3.   

    row_number用来返回有序组中一行的偏移量。
    row_number() over (partition by col_num order by col_num)-1按col_num分区,按col_num排序,产生每行的一个偏移量(从1开始,所以-1才出现你要求的0)
      

  4.   


    row_number用来返回有序组中一行的偏移量。
    偏移量 应该怎么解释?
      

  5.   


    partition by是分区,order by是排序,也就是说按照col_num来分组,每个组内部按照col_num来排序,从而产生一个序号(这个序号在组内部是从1开始,依次递增;在不同的组之间都是从1重新开始计数。)
    因为从1开始,所以-1才出现你要求的0.
      

  6.   

    row_number 就象是一个ID,序列增长,每次加1,并且是从1开始递增,因为你的需求是从0开始,所以后面-1
      

  7.   


    rank, dense_rank,row_number 分析函数 Rank,Dense_rank,Row_number函数为每条记录产生一个从1开始至N的自然数,N的值可能小于等于记录的总数。这3个函数的唯一区别在于当碰到相同数据时的排名策略。 因为楼主是从0开始的,所以减1.① ROW_NUMBER: 
    Row_number函数返回一个唯一的值,当碰到相同数据时,排名按照记录集中记录的顺序依次递增。 ② DENSE_RANK: 
    Dense_rank函数返回一个唯一的值,除非当碰到相同数据时,此时所有相同数据的排名都是一样的。 ③ RANK: 
    Rank函数返回一个唯一的值,除非遇到相同的数据时,此时所有相同数据的排名是一样的,同时会在最后一条相同记录和下一条不同记录的排名之间空出排名。 示例: 
    /* Formatted on 2009/11/08 20:48 (Formatter Plus v4.8.8) */ 
    SELECT ename, deptno, sal, 
          RANK () OVER (PARTITION BY deptno ORDER BY sal DESC) "RANK", 
          DENSE_RANK () OVER (PARTITION BY deptno ORDER BY sal DESC) "DENSE_RANK", 
          ROW_NUMBER () OVER (PARTITION BY deptno ORDER BY sal DESC) "ROW_NUMBER" 
      FROM scott.emp 本文来自CSDN博客,转载请标明出处http://blog.csdn.net/tianlesoftware/archive/2009/11/10/4795632.aspx
      

  8.   

    row_number() over (order by 列名 desc) as 别名
    为有序组中的每一行,返回一个唯一的排序值,序号由order by 子句指定列值大小决定 从1开始
    row_number() over (partition by 列名1 order by 列名2)
    对查询的查询结果先按 列名1 值来进先分组 ,对于同一个组的有序行按 列名2 再来分一个组内一个排名说简单一点:这个有点类似以前高中的高分排名,前一种就是全校一个年级所班级所有学员放在一起按总分来排名次,而后一种是以班级来单位排班级内部的名次。 
      

  9.   

    http://blog.csdn.net/simonezhlx/archive/2009/08/07/4421601.aspx