怎么样 用Oracle的存储过程 对A表数据按照B数据进行分摊

例如现在有两张表,一张表里面存着待分配的商品和数量,另一张表里面存着商品需求量,想要把A表中的数据按顺序填充到B表中,然后插入到C表中,最后将分配结果回传到B表的已配中。... 例如现在有两张表,一张表里面存着待分配的商品和数量,另一张表里面存着商品需求量,想要把A表中的数据按顺序填充到B表中,然后插入到C表中,最后将分配结果回传到B表的已配中。需要用一个存储过程来自动执行 展开
 我来答
oracle九叔
2019-03-28 · TA获得超过4.9万个赞
知道大有可为答主
回答量:4.9万
采纳率:83%
帮助的人:1.3亿
展开全部

你好!

使用存储过程有点多此一举,你理解一下我下面的SQL:

WITH T AS (
          SELECT 'A1' AS INV,1 ODR,  43 amt FROM DUAL
UNION ALL SELECT 'A1' AS INV,2 ODR,  44 amt FROM DUAL
UNION ALL SELECT 'A1' AS INV,3 ODR,  45 amt FROM DUAL
UNION ALL SELECT 'A2' AS INV,1 ODR,  60 amt FROM DUAL
UNION ALL SELECT 'A2' AS INV,2 ODR,  66 amt FROM DUAL
UNION ALL SELECT 'A3' AS INV,1 ODR,  11 amt FROM DUAL
UNION ALL SELECT 'A3' AS INV,2 ODR,  22 amt FROM DUAL
),
t1 AS (
SELECT 'A1' ISV,100 MNT FROM DUAL UNION ALL
SELECT 'A2' ISV,150 MNT FROM DUAL UNION ALL
SELECT 'A3' ISV,30 MNT FROM DUAL
)
SELECT inv,odr,CASE WHEN amt_sum <= mnt THEN amt
                    ELSE amt-(amt_sum-mnt) END mnt  FROM (
SELECT T.*, SUM(AMT) OVER(PARTITION BY INV ORDER BY ODR) AMT_SUM, T1.MNT
  FROM T, T1
 WHERE T.INV = T1.ISV)

望采纳!

万山数据
2024-11-14 广告
数据仓库处理是北京万山数据科技有限公司的核心业务之一。我们专注于高效、安全地处理大规模数据,通过先进的数据仓库技术,实现数据的集成、存储、管理和分析。我们的数据仓库解决方案能够支持复杂的数据查询和分析需求,提供实时的数据洞察,助力企业做出更... 点击进入详情页
本回答由万山数据提供
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式