insert into select时自己加上编号
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了insert into select时自己加上编号相关的知识,希望对你有一定的参考价值。
问题:把一个表的几列按条件插入到一个临时表中,临时表中有序号一栏,现需确保每次用insert into select时都能自动从1开始给加上序号,问语句如何写?
insert into a(序号,产品规格,数量) select (???),产品规格,sum(数量) from b group by b.产品规格
另,我需要的是每次都从1开始,用自动增加的字段,每次都是累加上去的!
比如第一次插入了10条序号就是1-10
第2次又插入了5条,序号就是1-5而不是11-15是这个意思
还有个,是在ACCESS VBA里!
create table #a( 序号 int identity not null, 产品规格 varchar(20), 数量 int)
insert into #a( 产品规格, 数量)
select 产品规格,sum(数量)
--where 你的条件
from b group by b.产品规格
--接下来处理数据,处理完了,再第二次查询
第二次查询:
drop table #a
create table #a( 序号 int identity not null, 产品规格 varchar(20), 数量 int)
insert into #a( 产品规格, 数量)
select 产品规格,sum(数量)
--where 你的条件
from b group by b.产品规格
--接下来处理数据,处理完了,再第三次查询
第三次查询:
drop table #a
create table #a( 序号 int identity not null, 产品规格 varchar(20), 数量 int)
insert into #a( 产品规格, 数量)
select 产品规格,sum(数量)
--where 你的条件
from b group by b.产品规格
--…… 参考技术A 那就需要借助临时表,并使用identity函数
if exists(select * from tempdb.dbo.sysobjects where name='#')
drop table #
select identity(int,1,1) as 序号,产品规格,sum(数量) as 数量
into #
from b
group by b.产品规格
insert into a(序号,产品规格,数量)
select 序号,产品规格,数量
from # 参考技术B 触发器解决吧。。
b是你的数据来源表,临时表#A是一个中间层(嫁接) 前提是你a表的结构别违反了主键约束 也就是不要把a表的序号设置为单个主键处理
这个触发器的意思就是说每次有数据插入b表的时候,先把临时表删除(为了保证数据是每次插入的最新的,就不会检索出以前的数据了),然后把B表新增的数据经过处理导入临时表,就可以实现你每次插入的数据都是从1开始了。。
create trigger trig1 on b
for insert
as
begin
select identity(int,1,1) as 序号,产品规格,sum(数量) into #A from inserted group by inserted.产品规格
insert into a(序号,产品规格,数量) select 序号,产品规格,数量
from #A
end 参考技术C 可以用游标:
insert into a(序号,产品规格,数量) select RANK() OVER (ORDER BY 产品规格 DESC) as 序号,产品规格,sum(数量) from b group by b.产品规格 参考技术D insert into a(序号,产品规格,数量) select rownum,产品规格,sum(数量) from b group by b.产品规格
SELECT INTO 和 INSERT INTO SELECT比较
Insert是T-sql中常用语句,但我们在开发中经常会遇到需要表复制的情况,如将一个table1的数据的部分字段复制到table2中,或者将整个table1复制到table2中,这时候我们就要使用SELECT INTO 和 INSERT INTO SELECT 表复制语句了。
1.INSERT INTO SELECT语句
语句形式为:Insert into Table2(field1,field2,...) select value1,value2,... from Table1
示例如下:
--1.创建测试表 create TABLE Table1 ( a varchar(10), b varchar(10), c varchar(10), CONSTRAINT [PK_Table1] PRIMARY KEY CLUSTERED ( a ASC ) ) ON [PRIMARY] create TABLE Table2 ( a varchar(10), c varchar(10), d int, CONSTRAINT [PK_Table2] PRIMARY KEY CLUSTERED ( a ASC ) ) ON [PRIMARY] GO --2.创建测试数据 Insert into Table1 values(‘赵‘,‘asds‘,‘90‘) Insert into Table1 values(‘钱‘,‘asds‘,‘100‘) Insert into Table1 values(‘孙‘,‘asds‘,‘80‘) Insert into Table1 values(‘李‘,‘asds‘,null) GO select * from Table2 --3.INSERT INTO SELECT语句复制表数据 Insert into Table2(a, c, d) select a,c,5 from Table1 GO --4.显示更新后的结果 select * from Table2 GO --5.删除测试表 drop TABLE Table1 drop TABLE Table2
2.SELECT INTO FROM语句
语句形式为:SELECT vale1, value2 into Table2 from Table1
要求目标表Table2不存在,因为在插入时会自动创建表Table2,并将Table1中指定字段数据复制到Table2中。示例如下:
--1.创建测试表 create TABLE Table1 ( a varchar(10), b varchar(10), c varchar(10), CONSTRAINT [PK_Table1] PRIMARY KEY CLUSTERED ( a ASC ) ) ON [PRIMARY] GO --2.创建测试数据 Insert into Table1 values(‘赵‘,‘asds‘,‘90‘) Insert into Table1 values(‘钱‘,‘asds‘,‘100‘) Insert into Table1 values(‘孙‘,‘asds‘,‘80‘) Insert into Table1 values(‘李‘,‘asds‘,null) GO --3.SELECT INTO FROM语句创建表Table2并复制数据 select a,c INTO Table2 from Table1 GO --4.显示更新后的结果 select * from Table2 GO --5.删除测试表 drop TABLE Table1 drop TABLE Table2
以上是关于insert into select时自己加上编号的主要内容,如果未能解决你的问题,请参考以下文章
INSERT INTO SELECT 很慢,但是单独运行时 INSERT 或 SELECT 很快
调用 OPENROWSET 时 INSERT INTO 和 SELECT INTO 的区别