我试图用下面的方法拆分数据集,所以我可以根据另一个表中的值来分配一个值。
这是我到目前为止使用DENSE_RANK()尝试实现此目的的代码。
declare @t1 table (ID char(3) not null,Name char(5) not null)
insert into @t1(ID, Name) values
('ID1','Test1'),
('ID2','Test1'),
('ID3','Test2')
declare @t2 table (CusID char(3) not null,counter int not null)
insert into @t2(CusID, counter) values
('A1', 100),
('A2', 200),
('A3', 300)
select ID,Name,'ExampleST' +
RIGHT('00000' + CONVERT(varchar(4),
DENSE_RANK() OVER (ORDER BY Name)+ counter)
,5) as NewID
from @t1
CROSS JOIN @t2
order by ID
返回:
ID Name NewID
ID1 Test1 ExampleST00101
ID1 Test1 ExampleST00201
ID1 Test1 ExampleST00301
ID2 Test2 ExampleST00102
ID2 Test2 ExampleST00202
ID2 Test2 ExampleST00302
ID3 Test3 ExampleST00103
ID3 Test3 ExampleST00203
ID3 Test3 ExampleST00303
我想要它返回
ID Name NewID
ID1 Test1 ExampleST00100
ID1 Test1 ExampleST00100
ID1 Test1 ExampleST00100
ID2 Test2 ExampleST00200
ID2 Test2 ExampleST00200
ID2 Test2 ExampleST00200
ID3 Test3 ExampleST00300
ID3 Test3 ExampleST00300
ID3 Test3 ExampleST00300
如何做到这一点?
答案 0 :(得分:0)
如果我理解正确,您不需要dense_rank()
,您只需要每个名称的计数器max()
:
select ID, Name,
('ExampleST' +
right('00000' + cast(dense_rank() over (order by name) * 100 as varchar(255)),
5) as NewID
from @t1 cross join
@t2
order by ID;