SQL-为每次出现的值添加一个计数器
我有一个简单的select,返回类似 例如,从sourcetabel中选择ColumnA、ColumnB、ColumnC 现在我想在这里有一个计数器,它可以执行以下操作: 每次在A列中找到一个匹配项时,它都会在B列中添加一个数字 这意味着:SQL-为每次出现的值添加一个计数器,sql,sql-server,select,count,Sql,Sql Server,Select,Count,我有一个简单的select,返回类似 例如,从sourcetabel中选择ColumnA、ColumnB、ColumnC 现在我想在这里有一个计数器,它可以执行以下操作: 每次在A列中找到一个匹配项时,它都会在B列中添加一个数字 这意味着: Column A - Column B - Column C John - Something **1** - 123 John - Something **2** - 456 Mark - Something **1**
Column A - Column B - Column C
John - Something **1** - 123
John - Something **2** - 456
Mark - Something **1** - 123
Mark - Something **2** - 456
有人知道我怎么能轻松做到这一点吗
仅供参考:我正在使用MSSQL
谢谢 您可以使用concat和ANSI标准行数函数:
select a,
concat(a, ' **', row_number() over (partition by a, b order by b), '**') as new_b,
c
from t;
SELECT A, B, C, ROW_NUMBER() OVER(PARTITION BY A,B,C ORDER BY (SELECT NULL))
FROM TableName
concat的确切功能因数据库而异。如果您的数据库支持,请使用行数功能:
select a,
concat(a, ' **', row_number() over (partition by a, b order by b), '**') as new_b,
c
from t;
SELECT A, B, C, ROW_NUMBER() OVER(PARTITION BY A,B,C ORDER BY (SELECT NULL))
FROM TableName
行的顺序是任意的,因为它们对于MSSQL来说无论如何都是相同的
按名字顺序选择A、B+castROW_编号的超额部分
从sourcetabel中选择NULL作为varchar10作为B,C
按条款分组使用您使用的关系型数据库是什么?什么版本?分区似乎是必需的,否则每行只需要一个计数器@GordonLinoff你的例子很好地解释了我的问题!顺便说一句**只是为了降价:我只需要这个号码