假如我一张表:
姓名       爱好
张三       打牌
张三       下棋
张三       唱歌
李四      打牌
李四      跳舞
....
我希望排序,并给一个编号,如果直接使用
select row_number() over(order by 姓名,爱好)  as 编号,姓名,爱好 FROM 表名
得到的编号是连续的,如
1  李四   打牌
2  李四   跳舞
3  张三  唱歌
4  张三  打牌
5  张三  下棋我希望得到如下结果:
1  李四   打牌
2  李四   跳舞
1  张三  唱歌
2  张三  打牌
3  张三  下棋
也就是按姓名,每组单独编号,能做到否?

解决方案 »

  1.   

    --用PARTITION by  分组编号
    select row_number() over(PARTITION by 姓名 order by 姓名,爱好) as 编号,姓名,爱好 FROM 表名
      

  2.   

    select row_number() over(partition by 姓名 order by 爱好) as 编号,姓名,爱好 FROM 表名
      

  3.   


    select row_number() over(PARTITION BY 姓名 order by 爱好) as 编号,姓名,爱好 FROM 表名
      

  4.   

    必须可
    select row_number()over(partition by 分组字段 order by 排序字段) as id, * from tb