4

我有一个包含名称的表:

Name
----
John Smith
John Smith
Sam Wood
George Wright
John Smith
Sam Wood

我想创建一个选择语句来显示:

姓名

'约翰史密斯 1'

'约翰史密斯 2'

'山姆伍德 1'

'乔治赖特 1'

'约翰史密斯 3'

'山姆伍德 2'

换句话说,我想为每个名称添加单独的计数器。有没有办法在不使用游标的情况下做到这一点?

4

2 回答 2

4

使用 ROW_NUMBER():

SELECT Name, ROW_NUMBER() OVER(Partition BY Name ORDER BY Name) as [Rank]
FROM MyTable
于 2010-06-03T11:35:58.840 回答
1

正在做:

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

于 2010-06-03T11:43:00.467 回答