当前位置: 代码迷 >> Sql Server >> 怎么写向不是自增列的字段里插入从某个数字开始递增的SQL语句,谢
  详细解决方案

怎么写向不是自增列的字段里插入从某个数字开始递增的SQL语句,谢

热度:54   发布时间:2016-04-27 15:26:45.0
如何写向不是自增列的字段里插入从某个数字开始递增的SQL语句,谢~

如图所示,我想把字段nh=2008的数据重新排列swh,使swh以200800001开始向下递增,而其他年份的数据保持不变,swh为Varchar(255)类型,谢~

------解决方案--------------------
SQL code
update aset swh = '2008'+ right('00000'+ltrim((select count(1) from tablename where nh = '2008'id <= a.id)),5)from talbename awhere nh = '2008'
------解决方案--------------------
SQL code
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 <> 2008UNION ALLSELECT 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        200700001583         2007        2007000027710        2008        2008000017768        2008        2008000027769        2008        2008000037842        2008        2008000047845        2008        2008000057889        2008        2008000067912        2008        2008000077963        2008        200800008*/--更改update tb set swh = t2.swhfrom 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) t2where t1.id = t2.idselect * from tb/*ID          nh          swh----------- ----------- --------------------582         2007        200700001583         2007        2007000027710        2008        2008000017768        2008        2008000027769        2008        2008000037842        2008        2008000047845        2008        2008000057889        2008        2008000067912        2008        2008000077963        2008        200800008*/DROP TABLE TB
  相关解决方案