求一条SQL,谢谢各位大哥!!! 求一条SQL,谢谢各位大哥!!! 求一条SQL,谢谢各位大哥!!!

daqi2009 2008-03-10 09:44:20
表scm_item(明细表)
ID pro_id(商品ID) pro_amount(数量) pro_price(产品名称) pro_money(金额) pro_cost(单价成本) stock_sort(1入库,2出库)
1 1 5 10.00 50.00 10.00 1
1 1 10 5.00 50.00 5.00 1
1 1 6 15.00 2
1 1 10 12.00 120.00 120.00 1
1 1 2 20.00 2
1 2 5 16.00 80.00 16.00 1
1 2 2 20.00 2
根据加权平均计算方法如何得到每个商品的出库的成本价.结果如下:
ID pro_id(商品ID) pro_amount(数量) pro_price(产品名称) pro_money(金额) pro_cost(单价成本) stock_sort(1入库,2出库)
1 1 5 10.00 50.00 10.00 1
1 1 10 5.00 50.00 5.00 1
1 1 6 15.00 40.00 6.67 2
1 1 10 12.00 120.00 120.00 1
1 1 2 20.00 18.95 9.47 2
1 2 5 16.00 80.00 16.00 1
1 2 2 20.00 320.00 16.00 2
...全文
165 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
flairsky 2008-03-10
  • 打赏
  • 举报
回复
如果你修改以前的入库金额和数目,那更应该用分阶段的视图了。

这就像写函数一样,不管你输入时多少,计算过程总是不变的
daqi2009 2008-03-10
  • 打赏
  • 举报
回复
谢谢楼上的大哥.
因为有时会修改以前的入库金额和数目.如果一旦调整,后面的成本都要变化.所以只有实现一步实现了.
flairsky 2008-03-10
  • 打赏
  • 举报
回复
看上去做分阶段的视图有助解决你这个问题

你要一步实现逻辑会有点乱

daqi2009 2008-03-10
  • 打赏
  • 举报
回复
谢谢大哥是这样的.
ID pro_id(商品ID) pro_amount(数量) pro_price(产品名称) pro_money(金额) pro_cost(单价成本) stock_sort(1入库,2出库)
1 1 5 10.00 50.00 10.00 1
1 1 10 5.00 50.00 5.00 1
1 1 6 15.00 40.00 6.667 2
出库的成本为:库存总金额/库存的总数量 (50.00+50.00)/(5+10)=6.667 出库金额为:6.667*6=40.00
当第二次出库时:(50.00+50.00-40.00)/(5+10-6)=3.157
当下一次出库时.也是这样的计算方法
dawugui 2008-03-10
  • 打赏
  • 举报
回复
怎么算噢?
pt1314917 2008-03-10
  • 打赏
  • 举报
回复
怎么算噢?
chuifengde 2008-03-10
  • 打赏
  • 举报
回复
CREATE TABLE a(ID INT,pro_id INT, pro_amount INT,pro_price money,pro_money money, pro_cost money,stock_sort INT)
INSERT a SELECT 1,1, 5, 10.00,50.00,10.00, 1
UNION ALL SELECT 1,1, 10,5.00, 50.00,5.00, 1
UNION ALL SELECT 1,1, 6, 15.00,NULL, NULL, 2
UNION ALL SELECT 1,1, 10,12.00,120.00,120.00,1
UNION ALL SELECT 1,1, 2, 20.00,NULL, NULL, 2 L
UNION ALL SELECT 1,2, 5, 16.00,80.00, 16.00, 1
UNION ALL SELECT 1,2, 2, 20.00,NULL, NULL, 2


DECLARE @a TABLE(xID INT IDENTITY(1,1),ID INT,pro_id INT, pro_amount INT,pro_price money,pro_money money, pro_cost money,stock_sort INT)
INSERT @a SELECT * FROM a

DECLARE @i INT
SET @i=0

WHILE @@ROWCOUNT>0
BEGIN
SET @i=@i+1
UPDATE a SET pro_cost=(SELECT sum(CASE WHEN stock_sort=1 THEN pro_money ELSE -pro_money END)*1.0/sum(CASE WHEN stock_sort=1 THEN pro_amount ELSE -pro_amount END ) FROM @a WHERE pro_id=a.pro_id AND xid<a.xid ) FROM @a a WHERE xid=@i AND pro_cost IS NULL
UPDATE @a SET pro_money=CASE WHEN pro_money IS NULL THEN pro_cost*pro_amount ELSE pro_money END WHERE xid=@i
END

SELECT * FROM @a
--result
/*
xID ID pro_id pro_amount pro_price pro_money pro_cost stock_sort
----------- ----------- ----------- ----------- --------------------- --------------------- --------------------- -----------
1 1 1 5 10.0000 50.0000 10.0000 1
2 1 1 10 5.0000 50.0000 5.0000 1
3 1 1 6 15.0000 40.0002 6.6667 2
4 1 1 10 12.0000 120.0000 120.0000 1
5 1 1 2 20.0000 18.9474 9.4737 2
6 1 2 5 16.0000 80.0000 16.0000 1
7 1 2 2 20.0000 32.0000 16.0000 2

(所影响的行数为 7 行)
*/

34,590

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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