想高手,盼高手,sql行更新

yanleigis 2003-01-24 12:25:14
drop table test;
Create table test (id integer,name varchar2(3),v1 integer ,v2 integer);
insert into test values (1,'aaa',10,8);
insert into test values (2,'aaa',5,2);
insert into test values (3,'aaa',2,3);
insert into test values (4,'aaa',0,0);
insert into test values (1,'bbb',7,8);
insert into test values (2,'bbb',5,2);
insert into test values (3,'bbb',1,3);
insert into test values (4,'bbb',0,0);
commit;
更新id=4的行,关系是id=4行(v1,v2)=(name对应id=)1行-(name对应id=)2行+(name对应id=)3行
更新后应为结果
ID NAM V1 V2
------ --- ---------- ----------
1 aaa 10 8
2 aaa 5 2
3 aaa 2 3
4 aaa 7 9
1 bbb 7 8
2 bbb 5 2
3 bbb 1 3
4 bbb 3 9
...全文
38 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
tsj68 2003-01-24
  • 打赏
  • 举报
回复
update test set v1_4=v1_1-v1_2+v1)3,v2_4=v2_1-v2_2+v2_3
cyberflying 2003-01-24
  • 打赏
  • 举报
回复
如果ID = 4的记录 v1 和v2不为0的话,最好是:

UPDATE test a
SET (a.v1,a.v2) =
(SELECT SUM(DECODE(id,2,-v1,v1)),
SUM(DECODE(id,2,-v2,v2))
FROM test b
WHERE b.id < 4
and b.name = a.name)
WHERE a.id = 4
tsj68 2003-01-24
  • 打赏
  • 举报
回复
如果不用pl/sql,还真不知道这样的语句如何写.
可不可以采用这样的表结构.
create table test(
nam varchar2(3),
v1_1 integer,
v1_2 integer,
v1_3 integer,
v1_4 integer,
v2_1 integer,
v2_2 integer,
v2_3 integer,
v2_4 integer)
然后:
insert into test values('aaa',10,5,2,0,8,2,3,0);

cyberflying 2003-01-24
  • 打赏
  • 举报
回复
UPDATE test a
SET (a.v1,a.v2) =
(SELECT SUM(DECODE(id,2,-v1,v1)),
SUM(DECODE(id,2,-v2,v2))
FROM test b
WHERE b.name = a.name)
WHERE a.id = 4

17,078

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧