SQL - 为每次出现的值添加一个计数器

时间:2017-07-24 11:43:36

标签: sql sql-server select count

我有一个简单的选择,返回类似的东西 (例如SELECT ColumnA,ColumnB,ColumnC FROM sourcetabel

Column A - Column B   - Column C
John     - Something  - 123
John     - Something  - 456
Mark     - Something  - 123
Mark     - Something  - 456

现在我想在这里有一个计数器来执行以下操作: 每次在A列中找到事件时,它都会向B列添加一个数字 这就意味着:

Column A - Column B   - Column C
John     - Something **1**  - 123
John     - Something **2**  - 456
Mark     - Something **1**  - 123
Mark     - Something **2**  - 456

有人知道我怎么能这么做吗?

仅供参考:我正在使用MSSQL

谢谢!

3 个答案:

答案 0 :(得分:1)

您可以使用concat()和ANSI标准row_number()功能:

select a,
       concat(a, ' **', row_number() over (partition by a, b order by b), '**') as new_b,
       c
from t;

concat()的确切功能因数据库而异。

答案 1 :(得分:0)

如果您的数据库支持它,请使用row_number函数:

SELECT A, B, C, ROW_NUMBER() OVER(PARTITION BY A,B,C ORDER BY (SELECT NULL))
FROM TableName

(行的顺序是任意的,因为它们无论如何都是相同的)

答案 2 :(得分:0)

对于MSSQL,

  

选择A,B +强制转换((ROW_NUMBER()OVER(PARTITION BY FirstName ORDER BY   (SELECT NULL)))作为varchar(10))作为B,C来自sourcetabel