SQL语句实现数量拆分问题

zbdzjx 2013-10-16 10:26:17
假如有三条入的记录,如下:

入单号 数量
A01 30
A02 40
A03 50

出是按20个一条。结果如下:

出单号 入单号 数量
B01 A01 20
B02 A01 10
B03 A02 10
B04 A02 20
B05 A02 10
B06 A03 10
B07 A03 20
B08 A03 20

也就是说,先从A01开始出,如果A01剩余的不够了,就从A02出。类似先进先出的方式。

请问,如何能够用一个SQL语句,或是拼SQL语句也可以,但不能用临时表,来生成结果。
...全文
294 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
zbdzjx 2013-10-16
  • 打赏
  • 举报
回复
引用 1 楼 HJ_daxian 的回复:
直接一个sql 要做比较麻烦 可以考虑分2步走 第一步 判断当前行(当前行之前所有行的合计不是20倍数)是否要拆分 如果需要 先将当前行的值拆分出来插入库 然后减去拆分的值 第二步 要将剩余的值 根据20来拆分 就容易多了
我初步的想法就是用临时表,一条一条的判断,一条一条的去减。 但缺点是,如果记录数比较多,那速度估计会慢。 因为这是一个报表,实际上的表相当于就两个,一个是入表,就是哪个东西,哪天,入了多少个;另一个出表,就是哪个东西,哪天,出了多少个。报表中就是按先进先出的规则将入和出对应上。
  • 打赏
  • 举报
回复
直接一个sql 要做比较麻烦 可以考虑分2步走 第一步 判断当前行(当前行之前所有行的合计不是20倍数)是否要拆分 如果需要 先将当前行的值拆分出来插入库 然后减去拆分的值 第二步 要将剩余的值 根据20来拆分 就容易多了

17,078

社区成员

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

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