问:今天遇到一个select into 的问题;
我想让INSERT INTO table (f1,f2) SELECT (V1,V2(这里值=值 +上一条插入记录的v2值))
例如 我有一个表 t1 (v_id,v_value) v_id自增 现在有两条记录
1、30,
2、35
t2表 (v_id,v_va) v_id 自增 t2表 有4条记录
1、5
2、5
3、5
4、5
要求是 把t2 表数据 插入到 t1 中 并累加 t1表 v_value 值
下边是我想一种方式 插入每次获取一下t1的最后一条记录值
eg:INSERT INTO t1 (v_id,v_value) SELECT v_id,v_va+(SELECT TOP 1 v_id FROM t1 ORDER BY v_id ) FROM t2 不知道有没有大神 有没有更好的方式; 游标是可以实现但是 效率上 我也就没有用
我想让INSERT INTO table (f1,f2) SELECT (V1,V2(这里值=值 +上一条插入记录的v2值))
例如 我有一个表 t1 (v_id,v_value) v_id自增 现在有两条记录
1、30,
2、35
t2表 (v_id,v_va) v_id 自增 t2表 有4条记录
1、5
2、5
3、5
4、5
要求是 把t2 表数据 插入到 t1 中 并累加 t1表 v_value 值
下边是我想一种方式 插入每次获取一下t1的最后一条记录值
eg:INSERT INTO t1 (v_id,v_value) SELECT v_id,v_va+(SELECT TOP 1 v_id FROM t1 ORDER BY v_id ) FROM t2 不知道有没有大神 有没有更好的方式; 游标是可以实现但是 效率上 我也就没有用
eg: SELECT * FROM t1
/*结果*/
1|30
2|35
3|40
4|45
5|50
6|55
看到这个结果你可能就明白了
想不到什么别的方法
INSERT INTO t1 (v_id,v_value) SELECT v_id,v_va+(SELECT max(v_value) FROM t1) FROM t2
;with t as
(
select top 1 0 as id,v_value as v_va,0 as RN from t1 order by v_id desc
union all
select v_id,v_va,ROW_NUMBER() over(order by v_id) as RN from t2
)
insert into t1(v_value)
select SUM(b.v_va) as sumValue From t a join t b
on a.RN>=b.RN and a.id>0
group by a.id
IF EXISTS (SELECT 1 FROM SYSOBJECTS WHERE name = 't2' )
BEGIN
DROP TABLE t2
END
GO
CREATE TABLE t2
(
v_id INT IDENTITY(1,1),
v_va INT
)
GO
IF EXISTS (SELECT 1 FROM SYSOBJECTS WHERE name = 't1' )
BEGIN
DROP TABLE t1
END
GO
CREATE TABLE t1
(
v_id INT IDENTITY(1,1),
v_value INT
)
GOINSERT INTO t1
SELECT 30 UNION
SELECT 35INSERT INTO t2
SELECT 5 UNION ALL
SELECT 5 UNION ALL
SELECT 5 UNION ALL
SELECT 5 GOWITH t3 AS
(
SELECT (SELECT SUM(v_va) FROM t2 As A WHERE A.v_id <= B.v_id) + (SELECT TOP 1 v_value FROM t1 ORDER BY v_id DESC) AS v_va
FROM t2 AS B
)INSERT INTO t1 (v_value) SELECT v_va FROM t3 SELECT * FROM t1v_id v_value
1 30
2 35
3 40
4 45
5 50
6 55
请教一下,14楼的代码在我这里报错,
原因是:union all中的第一个select 使用了 order by ,在你那里没报错吗?
模仿#14写了一个。insert into t1
SELECT (
SELECT SUM(v_va)
FROM t2 As A
WHERE A.v_id <= B.v_id)
+ (SELECT TOP 1 v_va
FROM t1
ORDER BY v_id DESC) AS v_va
FROM t2 AS B