求一SQL语句
有A,B两个表
A中有字段 MID,JiFenAll ...
B中有字段 MID,JiFen,Date_
A,B的关系:
A中的JiFenAll为B中JiFen的总和(相同的MID)
现在要这样,计算出某一日期(Date_)前的B中的MID 的JiFen总和,A中减去这个总和,
也就是去掉 某一日期(Date_)前的JiFen
如何写Update语句更新A?
拜托了!!!
问题点数:100、回复次数:19Top
1 楼JeromeLiu(烛光)回复于 2004-09-03 10:03:05 得分 50
--try next:
update t1 set t1.JiFenAll = (t1.JiFenAll - t2.JiFen)
from A t1
,(
select MID,sum(JiFen) JiFen from B
where Date_ < 某日期
group by MID
) t2
where t1.MID = t2.MIDTop
2 楼bzszp(SongZip)回复于 2004-09-03 10:03:18 得分 50
update a set jifenall=jifenall-(select sum(jifen)
from b where date_<=to_date('2004-01-01','yyyy-mm-dd')
and b.mid=a.mid)
where exists (select 1 from b where b.mid=a.mid);Top
3 楼bzszp(SongZip)回复于 2004-09-03 10:05:13 得分 0
JeromeLiu(烛光)兄 用的不是oracle的语法吧
sql server的。Top
4 楼ptma(守望者)回复于 2004-09-03 10:30:48 得分 0
都不行啊Top
5 楼bzszp(SongZip)回复于 2004-09-03 10:35:38 得分 0
哪里不行?
把执行的脚本帖出来
包括提示的错误信息。Top
6 楼JeromeLiu(烛光)回复于 2004-09-03 10:59:47 得分 0
--我的语句有问题,很抱歉,我测试了一下,下面的应该可以:
update A set JiFenAll =
JiFenAll -
nvl(
(
select sum(JiFen) from B
where Date_ < '某日期'
where MID = A.MID
),0)Top
7 楼ptma(守望者)回复于 2004-09-03 11:00:31 得分 0
缺少表达式:select处Top
8 楼bzszp(SongZip)回复于 2004-09-03 11:03:00 得分 0
你的语句呢?也帖出来Top
9 楼JeromeLiu(烛光)回复于 2004-09-03 11:15:10 得分 0
缺少表达式:select处
--
把语句帖出,汗~~Top
10 楼ptma(守望者)回复于 2004-09-03 11:22:20 得分 0
语句分别是
update vip_card set JIFEN_BALANCE=JIFEN_BALANCE-(select sum(amt)
from vip_consume where date_<'28-SEP-02'
and vip_consume.cardid=vip_card.cardid)
where exists (select 1 from vip_consume where vip_card.cardid=vip_consume.cardid);
/
update vip_card set JIFEN_BALANCE =
JIFEN_BALANCE -
nvl(
(
select sum(amt) from vip_consume
where date_ < '28-SEP-03'
and cardid = vip_card.cardid group by cardid
),0)Top
11 楼JeromeLiu(烛光)回复于 2004-09-03 11:37:54 得分 0
update vip_card set JIFEN_BALANCE=JIFEN_BALANCE-(select sum(amt)
from vip_consume where date_<to_date('2002-09-28','yyyy-mm-dd')
and vip_consume.cardid=vip_card.cardid)
where exists (select 1 from vip_consume where vip_card.cardid=vip_consume.cardid);
/
update vip_card set JIFEN_BALANCE =
JIFEN_BALANCE -
nvl(
(
select sum(amt) from vip_consume
where date_ < to_date('2002-09-28','yyyy-mm-dd')
and cardid = vip_card.cardid
),0)
/
Top
12 楼ptma(守望者)回复于 2004-09-03 12:02:43 得分 0
不是date格式的问题Top
13 楼JeromeLiu(烛光)回复于 2004-09-03 12:22:18 得分 0
update vip_card set JIFEN_BALANCE =
JIFEN_BALANCE -
nvl(
(
select sum(amt) from vip_consume
where date_ < to_date('2002-09-28','yyyy-mm-dd')
and cardid = vip_card.cardid
),0)
/
--这个在我机器上通过Top
14 楼JeromeLiu(烛光)回复于 2004-09-03 12:25:58 得分 0
create table AAA(MID number(2),JiFenAll number(5));
create table BBB(MID number(2),JiFen number(5),Date_ date);
insert into AAA values(1,500);
insert into AAA values(2,200);
insert into AAA values(3,250);
insert into AAA values(4,300);
insert into BBB values(1,10,sysdate);
insert into BBB values(1,20,sysdate);
insert into BBB values(1,30,sysdate);
insert into BBB values(2,100,sysdate);
insert into BBB values(3,100,sysdate);
insert into BBB values(3,200,sysdate);
select * from aaa;
select * from bbb;
update AAA a set JiFenAll =
JiFenAll -
nvl(
(
select sum(JiFen) from BBB
--where Date_ < 某日期
where MID = a.MID
),0);
select * from aaa;
drop table AAA;
drop table BBB;Top
15 楼bzszp(SongZip)回复于 2004-09-03 12:26:19 得分 0
不知道楼主是什么问题
Top
16 楼bzszp(SongZip)回复于 2004-09-03 12:33:22 得分 0
12:20:48 SQL> select * from aaa;
MID JIFENALL
---------- ----------
1 500
2 200
3 250
4 300
已用时间: 00: 00: 00.03
12:20:49 SQL> select * from bbb;
MID JIFEN DATE_
---------- ---------- ----------
1 10 03-9月 -04
1 20 03-9月 -04
1 30 03-9月 -04
2 100 03-9月 -04
3 100 03-9月 -04
3 200 03-9月 -04
已选择6行。
已用时间: 00: 00: 00.66
12:20:50 SQL>
12:20:51 SQL> update aaa set jifenall=jifenall-(select sum(jifen) from
12:22:03 2 bbb where bbb.mid=aaa.mid)
12:22:19 3 where exists (select 1 from bbb where bbb.mid=aaa.mid);
已更新3行。
已用时间: 00: 00: 00.41
12:22:38 SQL> select * from aaa;
MID JIFENALL
---------- ----------
1 440
2 100
3 -50
4 300
已用时间: 00: 00: 00.75
12:23:03 SQL> commit;
提交完成。
已用时间: 00: 00: 00.07Top
17 楼ptma(守望者)回复于 2004-09-03 13:02:25 得分 0
你们是oralce的数据库的SQL?Top
18 楼bzszp(SongZip)回复于 2004-09-03 13:04:03 得分 0
是的
你好好检查一下,不应该有问题的。Top
19 楼bzszp(SongZip)回复于 2004-09-03 15:48:22 得分 0
注意:'-'号不能放在一行的最后,SQL*PLUS会认为是行连接符,而不是减号!Top




