日期:2014-05-18 浏览次数:20729 次
update a
set swh = '2008'+ right('00000'+ltrim((select count(1) from tablename where nh = '2008'id <= a.id)),5)
from talbename a
where nh = '2008'
------解决方案--------------------
CREATE TABLE TB(ID INT, nh INT, swh VARCHAR(20))
INSERT INTO TB VALUES(582 , 2007, '200700001')
INSERT INTO TB VALUES(583 , 2007, '200700002')
INSERT INTO TB VALUES(7710, 2008, '200800001')
INSERT INTO TB VALUES(7768, 2008, '200800001')
INSERT INTO TB VALUES(7769, 2008, '200800001')
INSERT INTO TB VALUES(7842, 2008, '200800001')
INSERT INTO TB VALUES(7845, 2008, '200800001')
INSERT INTO TB VALUES(7889, 2008, '200800001')
INSERT INTO TB VALUES(7912, 2008, '200800001')
INSERT INTO TB VALUES(7963, 2008, '200800001')
GO
--查询
SELECT * FROM TB WHERE NH <> 2008
UNION ALL
SELECT ID , NH , SWH = '2008' + RIGHT('00000' + CAST(M.SWH AS VARCHAR),5) FROM
(
SELECT ID , NH , SWH = (SELECT COUNT(1) FROM TB WHERE NH = 2008 AND ID < T.ID) + 1 FROM TB T WHERE NH = 2008
) M
/*
ID nh swh
----------- ----------- --------------------
582 2007 200700001
583 2007 200700002
7710 2008 200800001
7768 2008 200800002
7769 2008 200800003
7842 2008 200800004
7845 2008 200800005
7889 2008 200800006
7912 2008 200800007
7963 2008 200800008
*/
--更改
update tb
set swh = t2.swh
from tb t1 , (SELECT ID , NH , SWH = '2008' + RIGHT('00000' + CAST(M.SWH AS VARCHAR),5) FROM
(
SELECT ID , NH , SWH = (SELECT COUNT(1) FROM TB WHERE NH = 2008 AND ID < T.ID) + 1 FROM TB T WHERE NH = 2008
) M) t2
where t1.id = t2.id
select * from tb
/*
ID nh swh
----------- ----------- --------------------
582 2007 200700001
583 2007 200700002
7710 2008 200800001
7768 2008 200800002
7769 2008 200800003
7842 2008 200800004
7845 2008 200800005
7889 2008 200800006
7912 2008 200800007
7963 2008 200800008
*/
DROP TABLE TB