SQL Server存储过程:在每次出现的值中创建增量ID

时间:2015-03-27 13:36:25

标签: sql sql-server-2008

我有一个存储过程,并希望在结果中添加一个显示我的值(NameOcc)出现次数的新列(Name)。这是一个测试表:

| Name |City| Day |
-------------------
| John | Oy |  1  |
| John | Oy |  7  |
|Peter | Oz |  3  |
| Boby | Pi |  9  |
| Boby | Pi |  4  |
| John | Pi |  4  |
| Boby | Pi |  8  |

我想要这个结果:

| Name |City| Day |NameOcc|
---------------------------
| John | Oy |  1  |   1   |
| John | Oy |  7  |   2   |
|Peter | Oz |  3  |   1   |
| Boby | Pi |  9  |   1   |
| Boby | Pi |  4  |   2   |
| John | Pi |  5  |   3   |
| Boby | Pi |  8  |   3   |

你有什么想法怎么做?

1 个答案:

答案 0 :(得分:3)

您可以使用CTE(common-table-expression)+ ROW_NUMBER

WITH CTE AS(
    SELECT n.*, 
           NameOcc = ROW_NUMBER() OVER (PARTITION BY Name, City ORDER BY Name, City, Day)
    FROM dbo.Names n
)
SELECT * FROM CTE

Demo

Here是一个更有意义的示例,其中包含从您未提供的主键列派生的正确顺序。逻辑是一样的。