暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Oracle 使用来自另一个表的分组数据更新一个表中的列

askTom 2017-06-20
239

问题描述

你好,
我想知道是否可以将一个表中的相关记录分组以用作要在另一个表中更新的数据。对我来说,这似乎是合乎逻辑的,但它不起作用。我添加了两个表的精简版本,其中仅包含SQL live更新中使用的必填字段。感谢您提供的任何帮助

update trans a
set activityfeeamt =
 (
   select sum(tl.totaldolamt * -1)Fee
      from transled tl
   where a.transid = tl.transid and a.planid = tl.planid 
      and tl.planid = '0003' and tl.transtypecd = 'Di'
group by tl.transid, tl.planid, tl.ssnum
      having sum(tl.totaldolamt * -1) < (select t.activityfeeamt from trans t where t.planid = '0003' and tl.transid = t.transid)
);
复制


当我运行脚本时,它会更新所有记录,我想将更新限制为低于活动费用的记录。相反,脚本会正确更新少于活动费用的记录,但会在其他行中设置null或0。


专家解答

我不明白你到底想做什么。但是,如果您只想更新行的子集,则需要一个where子句。

您的支票少于活动费。不是set子句的子查询的having子句。类似:

update trans a
set    activityfeeamt = (
      select sum( tl.totaldolamt *-1 ) fee
      from transled tl
      where a.transid        = tl.transid
      and   a.planid         = tl.planid
      and   tl.planid        = '0003'
      and   tl.transtypecd   = 'Di'
      group by tl.transid, tl.planid, tl.ssnum
)
where activityfeeamt > (
      select sum( tl.totaldolamt *-1 ) fee
      from transled tl
      where a.transid        = tl.transid
      and   a.planid         = tl.planid
      and   tl.planid        = '0003'
      and   tl.transtypecd   = 'Di'
      group by tl.transid, tl.planid, tl.ssnum
);
复制

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论