我有一个包含名称的表:
Name
----
John Smith
John Smith
Sam Wood
George Wright
John Smith
Sam Wood
我想创建一个选择语句来显示:
姓名
'约翰史密斯 1'
'约翰史密斯 2'
'山姆伍德 1'
'乔治赖特 1'
'约翰史密斯 3'
'山姆伍德 2'
换句话说,我想为每个名称添加单独的计数器。有没有办法在不使用游标的情况下做到这一点?
使用 ROW_NUMBER():
SELECT Name, ROW_NUMBER() OVER(Partition BY Name ORDER BY Name) as [Rank]
FROM MyTable
正在做:
select name, count(*) as total from table group by name;
会给你一些看起来像这样的东西:
name | total
-------------+------------
John Smith | 2
-------------+------------
Sam Wood | 2
-------------+------------
George Wright| 1
这不是你真正想要的——正如 ck 所指出的,ROW_NUMBER() 是你想要的,但并非所有数据库都支持它——例如,mysql 不支持。如果您使用的是 MySQL,这可能会有所帮助: ROW_NUMBER() in MySQL