34,590
社区成员
发帖
与我相关
我的任务
分享
create table mic
(M1 varchar(20), M2 varchar(10), M3 varchar(10))
insert into mic
select '20120419000001', 'KH0001', null union all
select '20120425000001', 'KH0002', null union all
select '20120503000001', 'KH0002', null union all
select '20120503000002', 'KH0004', null
select M1,M2,
replicate('0',3-len(8+(dense_rank() over(order by M2)-1)))
+cast(8+dense_rank() over(order by M2)-1 as varchar) 'M3'
from mic
/*
M1 M2 M3
-------------------- ---------- -------
20120419000001 KH0001 008
20120425000001 KH0002 009
20120503000001 KH0002 009
20120503000002 KH0004 010
(4 row(s) affected)
*/
create table tb(M1 VARCHAR(50),M2 VARCHAR(20),M3 VARCHAR(3))
GO
INSERT TB SELECT '20120419000001', 'KH0001', NULL
UNION ALL SELECT '20120425000001' ,'KH0002' ,NULL
UNION ALL SELECT '20120503000001' ,'KH0002' ,NULL
UNION ALL SELECT '20120503000002', 'KH0004' ,NULL
go
DECLARE @n INT,@x VARCHAR(20)
SET @n=7
UPDATE TB SET @n=CASE WHEN @x=m2 THEN @n ELSE @n+1 END,@x=M2,m3=RIGHT('000'+ RTRIM(@n),3)
SELECT * FROM Tb
/*
20120419000001 KH0001 008
20120425000001 KH0002 009
20120503000001 KH0002 009
20120503000002 KH0004 010
*/
drop table tb
go