我正在为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
这可以在不使用游标的情况下完成吗?任何我可以阅读有关所用方法的链接都将不胜感激。
由于
答案 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