一个SQL语句求解,急!

qxm 2003-09-03 11:27:30
问题简化为
表a(task_id,task_status)表示任务号和完成进度(百分比)
表b(task_id,task_seq,task_stats)表示任务号,子任务和完成状态(0:未执行,1:进行中,2:完成)
要求:将B表中所有task_id相同的并且已经完成的(task_stats=2)的task_seq的总数比上同一个task_id的所有task_seq的总数插入到A表中的task_status(根据a.task_id=b.task_id)
非常感谢大家!
...全文
93 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
onejune4450 2003-09-03
  • 打赏
  • 举报
回复
update a set task_status = (select sum(decode(task_stats,2,1,0))/count(1) from b where b.task_id = a.task_id)
where exists ( select 1 from b where b.task_id = a.task_id)
qxm 2003-09-03
  • 打赏
  • 举报
回复
对不起,没有说明白
A表中已经存在task_id这条记录了,只是task_status为空,或者是一个旧值。
所以INSERT肯定不对的,只能是UPDATE
B表是A表的子表,所以肯定是先有A表中的记录,才有B表中的记录。
onejune4450 2003-09-03
  • 打赏
  • 举报
回复
insert into a
select task_id,sum(decode(task_stats,2,1,0))/count(1) from b
group by task_id
onejune4450 2003-09-03
  • 打赏
  • 举报
回复
insert into a
select task_id,sum(decode(task,2,1,0))/count(1) from b
group by task_id
onejune4450 2003-09-03
  • 打赏
  • 举报
回复
insert into a
select task_id,sum(decode(task,2,1,0))/count(1) from b
group by task
onejune4450 2003-09-03
  • 打赏
  • 举报
回复
我的上贴排除了除零的情况,但不能更新旧值,可改为:
update a set task_status =
(select sum(decode(task_stats,2,1,0))/decode(count(1),0,1)
from b where b.task_id = a.task_id)

beckhambobo 2003-09-03
  • 打赏
  • 举报
回复
update a set task_status=(select sum(decode(task_stats,2,task_seq))/sum(task_seq) from b where a.task_id=b.task_id group by task_id)
beckhambobo 2003-09-03
  • 打赏
  • 举报
回复
update a set task_status=(select sum(decode(task_stats,2,task_seq))/sum(task_seq) from b where a.task_id=b.task_id group by task_id)
beckhambobo 2003-09-03
  • 打赏
  • 举报
回复
insert into a select task_id,sum(decode(task_stats,2,task_seq))/sum(task_seq) from b group by task_id

17,086

社区成员

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

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