对于每个唯一值,将1添加到变量并显示在select语句中

时间:2014-04-02 13:40:36

标签: sql tsql

我正在为referenceID列创建一个新ID,该列将使用一个确定下一个可用ID号的变量。对于“名称”列中的每个唯一名称,此ID号应该递增。

DECLARE @PREFIX varchar(2);
SET @PREFIX = 'ST';
DECLARE @TEMPID INT;
SET @TEMPID = 0026;

SELECT ID, Name, LEFT(T1.[Name],3) + @PREFIX + RIGHT('0000'+CAST(@TEMPID AS varchar(4)),4) + RIGHT(DB1..T2.C1, 6) AS NewID

输出应该是什么样子的示例。

ID,  Name,  NewID
ID1, Test1, ExampleST0027
ID2, Test1, ExampleST0027
ID3, Test2, ExampleST0028
ID4, Test2, ExampleST0028 
ID5, Test3, ExampleST0029
ID6, Test4, ExampleST0030

这可以在不使用游标的情况下完成吗?任何我可以阅读有关所用方法的链接都将不胜感激。

由于

1 个答案:

答案 0 :(得分:2)

此查询与您的示例数据匹配,但可能不完全符合您的要求:

declare @t table (ID char(3) not null,Name char(5) not null)
insert into @t(ID,  Name) values
('ID1','Test1'),
('ID2','Test1'),
('ID3','Test2'),
('ID4','Test2'),
('ID5','Test3'),
('ID6','Test4')

select ID,Name,'ExampleST' +
       RIGHT('000' + CONVERT(varchar(4),
             DENSE_RANK() OVER (ORDER BY Name)+26)
       ,4) as NewID
from @t
order by ID

结果:

ID   Name  NewID
---- ----- -------------
ID1  Test1 ExampleST0027
ID2  Test1 ExampleST0027
ID3  Test2 ExampleST0028
ID4  Test2 ExampleST0028
ID5  Test3 ExampleST0029
ID6  Test4 ExampleST0030