日期:2014-05-18  浏览次数:20481 次

能不能使用类似row_number()进行分类编号
假如我一张表:
姓名 爱好
张三 打牌
张三 下棋
张三 唱歌
李四 打牌
李四 跳舞
....
我希望排序,并给一个编号,如果直接使用
select row_number() over(order by 姓名,爱好) as 编号,姓名,爱好 FROM 表名
得到的编号是连续的,如
1 李四 打牌
2 李四 跳舞
3 张三 唱歌
4 张三 打牌
5 张三 下棋

我希望得到如下结果:
1 李四 打牌
2 李四 跳舞
1 张三 唱歌
2 张三 打牌
3 张三 下棋
也就是按姓名,每组单独编号,能做到否?




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

------解决方案--------------------
SQL code
select row_number() over(partition by 姓名 order by 爱好) as 编号,姓名,爱好 FROM 表名

------解决方案--------------------
SQL code

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

------解决方案--------------------
探讨
SQL code

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

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