1.库存表
编码 仓库 库存 成本价
001 02 2 1.2
001 03 5 1.2
002 01 3 5.6
002 02 2 5.6 每个仓库成本价都是一样的,因为我是用移动加权,如果我本次进货如下: 2.进货表注意:进货仓库是 02 编码 进货数量 单价
001 2 1.8
002 3 6
结果(仓库)
编码 仓库 库存 成本价
001 02 4 1.33
001 03 5 1.33
002 01 3 5.75
002 02 5 5.75 1.要把商品进到相应的仓库里面
2.如果库存表某仓库不存在,则添加 (比如:库存表没有05仓库,但是我进货表的进货仓库是05,那么库存表生成一条05仓库的记录)
3.有两个表库存表和进货表,都要用到移动加权=(库存总金额+本次进货金额)/(库存总数量+本次进货数量)怎样用 UPDATE 语句写 求成本价
编码 仓库 库存 成本价
001 02 2 1.2
001 03 5 1.2
002 01 3 5.6
002 02 2 5.6 每个仓库成本价都是一样的,因为我是用移动加权,如果我本次进货如下: 2.进货表注意:进货仓库是 02 编码 进货数量 单价
001 2 1.8
002 3 6
结果(仓库)
编码 仓库 库存 成本价
001 02 4 1.33
001 03 5 1.33
002 01 3 5.75
002 02 5 5.75 1.要把商品进到相应的仓库里面
2.如果库存表某仓库不存在,则添加 (比如:库存表没有05仓库,但是我进货表的进货仓库是05,那么库存表生成一条05仓库的记录)
3.有两个表库存表和进货表,都要用到移动加权=(库存总金额+本次进货金额)/(库存总数量+本次进货数量)怎样用 UPDATE 语句写 求成本价
库存=a.库存+isnull(b.进货数量,0),
成本价=(c.金额+isnull(b.金额,0))/(c.库存+isnull(b.进货数量,0))
from 库存表 a inner join (
select 编码,sum(库存) as 库存,sum(库存*成本价) as 金额 from 库存表
group by 编码
) as c
on a.编码=b.编码
left join (
select 编码,sum(进货数量) as 进货数量,sum(进货数量*单价) as 金额 from 进货表
group by 编码
) as b
on a.编码=b.编码 and a.仓库='02'
SET 库存 = a.库存 + b.库存,
成本价 = (a.库存*a.成本价 + b.库存*b.成本价 )/(a.库存 + b.库存 )
FROM 进货表 a JOIN 进货表 b ON a.编码 = b.编码
WHERE a.仓库 = '02'
库存=a.库存+isnull(b.进货数量,0),
成本价=(c.金额+isnull(b.金额,0))/(c.库存+isnull(b.进货数量,0))
from 库存表 a inner join (
select 编码,sum(库存) as 库存,sum(库存*成本价) as 金额 from 库存表
group by 编码
) as c
on a.编码=b.编码
left join (
select 编码,sum(进货数量) as 进货数量,sum(进货数量*单价) as 金额 from 进货表
group by 编码
) as b
on a.编码=b.编码 and a.仓库='02'insert 库存表(编码,仓库,库存,成本价)
select
b.编码,
'02',
库存=b.进货数量,
成本价=(isnull(c.金额,0)+b.金额)/(isnull(c.库存,0)+b.进货数量)
from (
select 编码,sum(进货数量) as 进货数量,sum(进货数量*单价) as 金额 from 进货表
group by 编码
) as b left join (
select 编码,sum(库存) as 库存,sum(库存*成本价) as 金额 from 库存表
group by 编码
) as c
on b.编码=c.编码
where not exists (
select 1 from 库存表
where 编码=b.编码 and 仓库='02'
)
update a set 库存 = a.库存 + (case when 仓库='02' then b.进货数量 else 0 end)
,单价 =(b.进货金额+c.金额)/(b.数量+c.数量)
from 库存表 a
,(select 编码,sum(进货数量) 进货数量,sum(进货数量*单价) 进货金额 from 进货表) b
,(select 编码,sum(库存) 数量,sum(库存*成本价) 金额 from 库存表 group by 编码) c
where a.编码=b.编码 and a.编码 = c.编码
update a set 库存 = a.库存 + (case when 仓库='02' then b.sl else 0 end)
,单价 =(b.je+c.je)/(b.sl+c.sl)
from 库存表 a
,(select 编码 bm,sum(进货数量) sl,sum(进货数量*单价) je from 进货表 group by 编码) b
,(select 编码 bm,sum(库存) sl,sum(库存*成本价) je from 库存表 group by 编码) c
where a.编码=b.bm and a.编码 = c.bm
select 1 from 库存表
where 编码=b.编码 and 仓库='02')请问一下Haiwer : 为什么用 Select 1 , 而不用 select * 或 select 字段名
另:如果你的需求不是基于差价调拨的话,楼主的表设计不符合2NF,建议将成本价从库存表中分离。
库存=a.库存+isnull(b.进货数量,0),
成本价=(c.金额+isnull(b.金额,0))/(c.库存+isnull(b.进货数量,0))
from 库存表 a inner join (
select 编码,sum(库存) as 库存,sum(库存*成本价) as 金额 from 库存表
group by 编码
) as c
on a.编码=b.编码
left join (
select 编码,sum(进货数量) as 进货数量,sum(进货数量*单价) as 金额 from 进货表
group by 编码
) as b
on a.编码=b.编码 and a.仓库='02'
里面的 left join 该成 Inner Join 可以吗?