使用临时表进行编号重排的处理示例.sql
2012-05-19 08:54
309 查看
--测试资料
CREATE TABLE tb(
ID1 char(2) NOT NULL,
ID2 char(4) NOT NULL,
col int,
PRIMARY KEY(ID1,ID2))
INSERT tb SELECT 'aa','0001',1
UNION ALL SELECT 'aa','0003',2
UNION ALL SELECT 'aa','0004',3
UNION ALL SELECT 'bb','0005',4
UNION ALL SELECT 'bb','0006',5
UNION ALL SELECT 'cc','0007',6
UNION ALL SELECT 'cc','0009',7
GO
--重排编号处理
SELECT ID=IDENTITY(int,0,1),* INTO # FROM tb ORDER BY ID1,ID2
UPDATE a SET ID2=RIGHT(10001+b1.ID-b2.ID,4)
FROM tb a,# b1,(SELECT ID1,ID=MIN(ID) FROM # GROUP BY ID1)b2
WHERE a.ID1=b1.ID1 AND a.ID2=b1.ID2
AND b1.ID1=b2.ID1
DROP TABLE #
SELECT * FROM tb
/*--结果
ID1 ID2 col
---- ---- -----------
aa 0001 1
aa 0002 2
aa 0003 3
bb 0001 4
bb 0002 5
cc 0001 6
cc 0002 7
--*/
CREATE TABLE tb(
ID1 char(2) NOT NULL,
ID2 char(4) NOT NULL,
col int,
PRIMARY KEY(ID1,ID2))
INSERT tb SELECT 'aa','0001',1
UNION ALL SELECT 'aa','0003',2
UNION ALL SELECT 'aa','0004',3
UNION ALL SELECT 'bb','0005',4
UNION ALL SELECT 'bb','0006',5
UNION ALL SELECT 'cc','0007',6
UNION ALL SELECT 'cc','0009',7
GO
--重排编号处理
SELECT ID=IDENTITY(int,0,1),* INTO # FROM tb ORDER BY ID1,ID2
UPDATE a SET ID2=RIGHT(10001+b1.ID-b2.ID,4)
FROM tb a,# b1,(SELECT ID1,ID=MIN(ID) FROM # GROUP BY ID1)b2
WHERE a.ID1=b1.ID1 AND a.ID2=b1.ID2
AND b1.ID1=b2.ID1
DROP TABLE #
SELECT * FROM tb
/*--结果
ID1 ID2 col
---- ---- -----------
aa 0001 1
aa 0002 2
aa 0003 3
bb 0001 4
bb 0002 5
cc 0001 6
cc 0002 7
--*/
相关文章推荐
- 使用UPDATE进行编号重排的处理示例.sql
- 使用子查询进行编号重排的处理示例.sql
- 如何使用Transact-SQL进行事务处理[示例]
- 使用编号表按日期生成流水号的示例.sql
- 构造使用IN子句的动态Transact-SQL方法进行编号查询
- 返回已用编号、缺号分布字符串的处理示例.sql
- sql使用cast进行数据类型转换示例
- SqlPager最终版[附源码和示例程序](使用存储过程进行分页)
- 使用T-SQL进行数据库备份并检查该备份文件是否存在且作出相应处理
- sql使用cast进行数据类型转换示例
- 使用SQL语句来进行分页处理
- 使用SQL语句来进行分页处理
- 使用Try…Catch块进行T-SQL错误处理
- spring data jpa 想使用EntityManager 对sql 进行处理四种方式(第四种本人改写的)
- 融合了补号处理的编号生成处理示例.sql
- 使用T-SQL进行数据库备份并检查该备份文件是否存在且作出相应处理
- 树形数据深度排序处理示例(模拟单编号法).sql
- 在SQL Server 2005中使用Try…Catch块进行T-SQL错误处理
- 构造使用IN子句的动态Transact-SQL方法进行编号查询
- 构造使用IN子句的动态Transact-SQL方法进行编号查询