SQL中把差异金额按照收入比例分摊尾差如何处理????

qq_29728233 2019-02-26 09:56:45
现在有如下数据
行号 收入
1 1111
2 2222
3 3333
4 4444
5 5555
6 6666
合计 23331

现有差异500,然后差异金额除以收入总额算出系数,再拿收入金额* 系数,结果要保留两位,最后差异合计比实际多0.01 ,请问这个0.01改如何处理,如何能分配到最后一行,通过语句的方式
行号 收入 分摊系数 分摊金额
1 1111 0.021430715 23.81
2 2222 0.021430715 47.62
3 3333 0.021430715 71.43
4 4444 0.021430715 95.24
5 5555 0.021430715 119.05
6 6666 0.021430715 142.86
合计 23331 500.01
...全文
1715 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
wzh2021 2019-09-04
  • 打赏
  • 举报
回复
引用 1 楼 lich2005 的回复:
首先把想清楚把这个差异的数据放在哪一条记录上来处理,是行号最大的还是金额最大的等等,想好了规则就好处理了。
比如你准备放在最后一行处理,那就先汇总前面5条数据的金额,然后用总数 500 去减汇总金额就得到了最后一条数据
的分摊金额了。

话是好说,请放马
卖水果的net 2019-09-04
  • 打赏
  • 举报
回复
共 N行,最后一行的数值,可以为 500 - SUM(N1+ N2+ 。。。。 N(N-1))
AHUA1001 2019-03-04
  • 打赏
  • 举报
回复
你的意思是sql返回的结果,比正确的值,有0.01的偏差,对吗。
如果是这样,请把数据库里存数字的字段类型,无论是金额,还是其它,只要存数字的字段类型,统统换成DECIMAL类型。
yaiger 2019-02-28
  • 打赏
  • 举报
回复
row_number() over是个排序的序号,over()里面可以用order desc排序,然后取排序第一位的就行
引用 4 楼 qq_29728233 的回复:
我想用row_number() over函数,但是我如何获取最大的行号,金额最大行有可能有相同的
nayi_224 2019-02-28
  • 打赏
  • 举报
回复
还有rank和dense_rank
qq_29728233 2019-02-28
  • 打赏
  • 举报
回复
我想用row_number() over函数,但是我如何获取最大的行号,金额最大行有可能有相同的
lich2005 2019-02-26
  • 打赏
  • 举报
回复
首先把想清楚把这个差异的数据放在哪一条记录上来处理,是行号最大的还是金额最大的等等,想好了规则就好处理了。
比如你准备放在最后一行处理,那就先汇总前面5条数据的金额,然后用总数 500 去减汇总金额就得到了最后一条数据
的分摊金额了。
yaiger 2019-02-26
  • 打赏
  • 举报
回复
直接update, 抓取金额最大行的ROWID,以此为条件update
nayi_224 2019-02-26
  • 打赏
  • 举报
回复
你的意思是分摊金额的和与差异值的差加到最后一个行号的分摊金额上?

17,082

社区成员

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

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