SQL:在select中添加计数器

时间:2010-06-03 11:33:31

标签: sql counter

我有一个包含名称的表:

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

我想创建一个显示以下内容的select语句:

名称

'John Smith 1'

'John Smith 2'

“Sam Wood 1”

'George Wright 1'

'John Smith 3'

“Sam Wood 2”

换句话说,我想为每个名称添加单独的计数器。有没有办法不使用游标呢?

2 个答案:

答案 0 :(得分:2)

使用ROW_NUMBER():

SELECT Name, ROW_NUMBER() OVER(Partition BY Name ORDER BY Name) as [Rank]
FROM MyTable

答案 1 :(得分: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