问题描述
你好,
希望你身体健康最好。
我在微软视窗环境中工作,安装的数据库是甲骨文11gR2。
我有以下两个表与示例数据。
样本数据如下。
我的要求是从上面两个表创建视图,这些表将显示带有item_code的加权平均成本的日期明智的库存,如下所示:-
金额将按以下方式计算:-
金额 = 数量 * 费率
如果是首次购买,计算如下:
手中的数量 = 数量
平均费率 = 金额/数量
平均数量 = 手中的数量 * 平均比率
随后,在购买的情况下,将通过在运行余额中添加新购买的数量和金额来计算QTY_IN_HAND和avg_金额,如下所示:-
手数量 = 手数量
平均金额 = 平均金额
平均比率 = 平均比率/手中的数量
在销售的情况下,QTY_IN_HAND将通过减去销售数量来计算
手数量 = 手数量
但是,通过从 (数量 * avg_rate) 中减去运行的avg_moon,将减少avage_moon,如下所示:-
Avg _ 金额 = avg _ 金额-(数量 * avg _ 费率)
谢谢你的公式。但是我不明白您如何根据它们获得显示的平均费率/金额数字; 这些值似乎有一个循环定义。
不管怎样,要计算手头的数量,总结一下:
正购买数量
销售数量为负
这给出了
希望你身体健康最好。
我在微软视窗环境中工作,安装的数据库是甲骨文11gR2。
我有以下两个表与示例数据。
CREATE TABLE stock_master ( vno INTEGER, vdate DATE, vtype VARCHAR2(15) );
样本数据如下。
INSERT INTO stock_master VALUES (1, '25-JAN-19', 'PURCHASE’ ); INSERT INTO stock_master VALUES (2, '26-JAN-19', 'PURCHASE’ ); INSERT INTO stock_master VALUES (3, '26-JAN-19', 'SALE’ ); INSERT INTO stock_master VALUES (4, '27-JAN-19', 'SALE’ ); INSERT INTO stock_master VALUES (5, '28-JAN-19', 'PURCHASE’ ); INSERT INTO stock_master VALUES (6, '28-JAN-19', 'SALE’ ); CREATE TABLE stock_detail ( vd_no INTEGER, vno INTEGER, item_code VARCHAR2(8), qty NUMBER, rate NUMBER, vtype VARCHAR2(15) ); INSERT INTO stock_detail VALUES (1, 1, '001001’, 10, 100 ); INSERT INTO stock_detail VALUES (2, 2, '001001’, 50, 150 ); INSERT INTO stock_detail VALUES (3, 3, '001001’, 15, 160 ); INSERT INTO stock_detail VALUES (4, 4, '001001’, 5, 160 ); INSERT INTO stock_detail VALUES (5, 5, '001001’, 10, 165 ); INSERT INTO stock_detail VALUES (6, 6, '001001’, 50, 170 );
我的要求是从上面两个表创建视图,这些表将显示带有item_code的加权平均成本的日期明智的库存,如下所示:-
DATE ITEM_CODE QTY RATE AMOUNT QTY_IN_HAND AVG_RATE AVG_AMOUT VTYPE 25-Jan-19 001001 10 100 1000 10 100 1000 PURCHASE 26-Jan-19 001001 50 150 7500 60 141.6667 7083.335 PURCHASE 26-Jan-19 001001 15 160 2400 45 141.6667 6375.0015 SALE 27-Jan-19 001001 5 160 800 40 141.6667 5666.668 SALE 28-Jan-19 001001 10 165 1650 50 146.3334 7316.67 PURCHASE 28-Jan-19 001001 50 70 3500 0 146.3334 0 SALE
金额将按以下方式计算:-
金额 = 数量 * 费率
如果是首次购买,计算如下:
手中的数量 = 数量
平均费率 = 金额/数量
平均数量 = 手中的数量 * 平均比率
随后,在购买的情况下,将通过在运行余额中添加新购买的数量和金额来计算QTY_IN_HAND和avg_金额,如下所示:-
手数量 = 手数量
平均金额 = 平均金额
平均比率 = 平均比率/手中的数量
在销售的情况下,QTY_IN_HAND将通过减去销售数量来计算
手数量 = 手数量
但是,通过从 (数量 * avg_rate) 中减去运行的avg_moon,将减少avage_moon,如下所示:-
Avg _ 金额 = avg _ 金额-(数量 * avg _ 费率)
谢谢你的公式。但是我不明白您如何根据它们获得显示的平均费率/金额数字; 这些值似乎有一个循环定义。
不管怎样,要计算手头的数量,总结一下:
正购买数量
销售数量为负
这给出了
select m.*, d.qty, d.rate, sum ( case when vtype = 'PURCHASE' then qty else -qty ) over ( order by vdate, m.vno ) qty_on_hand from stock_master m join stock_detail d on m.vno = d.vno; VNO VDATE VTYPE QTY RATE QTY_ON_HAND 1 25-JAN-0019 00:00:00 PURCHASE 10 100 10 2 26-JAN-0019 00:00:00 PURCHASE 50 150 60 3 26-JAN-0019 00:00:00 SALE 15 160 45