如何将行号值获取到SQL Server 2008 R2中的同一行?

时间:2013-06-11 11:53:21

标签: tsql sql-server-2008-r2

如果重复相同的数据,我需要向行提供行号值

输入

create table test(id int,name varchar(10),sal int)
insert test values(101,'hdfc',15000)
insert test values(101,'hdfc',15000)
insert test values(101,'hdfc',15000)
select id+name+sal from test

预期产出:

lineno:1 101,hdfc,15000
lineno:2 101,hdfc,15000
lineno:3 101,hdfc,15000

如果再次插入新记录,则应从lineno1开始 例如:

lineno:1 101,IDBI,15000

注意:lineno是硬编码值,但数字应该增加。

1 个答案:

答案 0 :(得分:0)

使用CTERow_number()尝试:(假设您需要在单个列中生成结果,否则请在CTE中删除字符串连接)

;with cte as (
    select id, 
      convert(varchar(10), id) +', '+ name +', '+ convert(varchar(10), sal) cols,
      row_number() over(partition by id,name, sal order by id) rn
    from test
)
select 'lineno:' + convert(varchar(10), rn) + ' ' + cols as mystring
from cte
order by id

<强> SQL Fiddle Example

|                  MYSTRING |
-----------------------------
| lineno:1 101, hdfc, 15000 |
| lineno:2 101, hdfc, 15000 |
| lineno:3 101, hdfc, 15000 |
| lineno:1 101, IDBI, 15000 |