SQL把一个表中的记要插入到另外一个表中,并且某个列根据另外一个表的某列最大值加1
SQL把一个表中的记录插入到另外一个表中,并且某个列根据另外一个表的某列最大值加1
有两个表
A表
id title memo code
1 标题1 内容1 TT001
2 标题2 内容2 ST001
3 标题3 内容3 TT002
4 标题4 内容4 ST008
B表
id title memo code
1 标题1 内容1 ST
2 标题2 内容2 ST
3 标题3 内容3 TT
不用考虑重复
只需要把B表中的记录写入到A表
插入到A表后,code如A表中的格式,只是在A表中code(left(A.code,2)=B.code)的后三位的数值上加1
结果如下:
id title memo code
1 标题1 内容1 TT001
2 标题2 内容2 ST001
3 标题3 内容3 TT002
4 标题4 内容4 ST008
5 标题1 内容1 ST009
6 标题2 内容2 ST010
7 标题3 内容3 TT003
这样的SQL该如何写?
我现在用的是循环,不好。
------解决方案--------------------
有两个表
A表
id title memo code
1 标题1 内容1 TT001
2 标题2 内容2 ST001
3 标题3 内容3 TT002
4 标题4 内容4 ST008
B表
id title memo code
1 标题1 内容1 ST
2 标题2 内容2 ST
3 标题3 内容3 TT
不用考虑重复
只需要把B表中的记录写入到A表
插入到A表后,code如A表中的格式,只是在A表中code(left(A.code,2)=B.code)的后三位的数值上加1
结果如下:
id title memo code
1 标题1 内容1 TT001
2 标题2 内容2 ST001
3 标题3 内容3 TT002
4 标题4 内容4 ST008
5 标题1 内容1 ST009
6 标题2 内容2 ST010
7 标题3 内容3 TT003
这样的SQL该如何写?
我现在用的是循环,不好。
------解决方案--------------------
- SQL code
declare @A表 table
(id int identity(1,1),title varchar(5),memo varchar(5),code varchar(5))
insert into @A表
select '标题1','内容1','TT001' union all
select '标题2','内容2','ST001' union all
select '标题3','内容3','TT002' union all
select '标题4','内容4','ST008'
declare @B表 table
(id int identity(1,1),title varchar(5),memo varchar(5),code varchar(2))
insert into @B表
select '标题1','内容1','ST' union all
select '标题2','内容2','ST' union all
select '标题3','内容3','TT'
--插入数据 【这个位置实际上是可以不用外层嵌套的,嵌套是为了你看起来直观】
insert into @A表
select
title,memo,
code+right('000'+ltrim((select count(*) from @B表
where code=t.code and id<=t.id)
+(select max(right(code,3)+0) from @A表
where left(code,2)=t.code)),3)
from @B表 t
--查看数据
select * from @A表
/*
id title memo code
----------- ----- ----- -----
1 标题1 内容1 TT001
2 标题2 内容2 ST001
3 标题3 内容3 TT002
4 标题4 内容4 ST008
5 标题1 内容1 ST009
6 标题2 内容2 ST010
7 标题3 内容3 TT003
*/