求SQL语句(100分)

  • 主题发起人 主题发起人 宫雨
  • 开始时间 开始时间

宫雨

Unregistered / Unconfirmed
GUEST, unregistred user!
在ORACLE数据库中有两个表结构如下
a。bh,price 两个字段
01 100
02 100
03 100
b. bh, BM , pricea 三个字段
01 0100 120
01 0101 230
01 0102 110
02 0200 120
02 0201 230
02 0202 110

第一步、现在将数据库B汇总用如下语句
select bh,sum(pricea)
group by bh
第二步、我要用上面的查询结果来修改数据库A的PRICE字段

请问如何将这两步写为一个 update 语句(我不想用临时表)
 
update a set price=(select sum(pricea) from b where b.bh=a.bh)
 
宫雨,请问你的数据库在什么平台上?
walterzhang@263.net
 
我的数据库在NT4.0上
 
我给你提一些建议,可以使用oracle的procedure,
首先先定义cursor
cursor 1:(Select 字段 From 表 Where <条件> group by年),
统计出用年做group by 的统计结果
cursor 2:(select ... From ... where ... group 月)
统计出用月做group by 的统计结果
cursor 3:(select ... From ... where ... group 日)
统计出用日做group by 的统计结果
这样你的表中的内容已经全部都有了
剩下的就是把这三个表的内容进行组合排序了
用cursor1的记录做大循环,里面套上cursor2的循环,然后在cursor2中
套上cursor3的循环
一条一条的增加到一个新的oracle的临时表中就可以了
当然具体的语句你还要自己写,这种功能一般应用在报表中,是很复杂的
我只是给你一个方法...
 
To cytown:
是不是该这样:
update a set price=(select sum(pricea) from b) here b.bh=a.bh

 
当然可以用STORE PROCEDURE 做,但太复杂。
其实,这应该很简单,如下即可:
1、当B中没有该BH时也要修改A的记录,则用
update a set price=
(select sum(pricea) from b where b.bh=a.bh)
此时A为
BH PRICE
-- ---------
01 460
02 460
03

2、当B中没有该BH时就不修改A的记录,则用
update a set price=
(select sum(pricea) from b where b.bh=a.bh)
where exists
(select 1 from b where b.bh=a.bh)
此时A为:
BH PRICE
-- ---------
01 460
02 460
03 100

 
多人接受答案了。
 
后退
顶部