我有3个表
表1 材料表,结构是
商品名称 单位 单价 供应商
A PCS 10 A
B PCS 20 B
......
表2 入库表,结构是
商品名称 单位 单价 数量 时间 期数
A PCS 10 20 2008-08-30 200808
B PCS 20 30 2008-07-30 200807
B PCS 20 10 2008-08-30 200808
......
表表3 出库表,结构是
商品名称 单位 单价 数量 时间 期数
A PCS 10 10 2008-08-30 200808
B PCS 20 15 2008-08-20 200808
B PCS 20 5 2008-07-30 200807........
提问:
如何用1条sql语句实现
条件:按照期数(如200808期)进行汇总,期初数是200807期 收入数-发出数商品名称 单位 单价 期初数 本期收入数 本期发出数 结余
A PCS 10 0 20 10 10
B PCS 10 25 10 15 20另外就是按照时间段(开始时间2008-8-1,结束时间2008-8-31)进行汇总,效果如下:商品名称 单位 单价 时间段前余数 时间段内收入数 时间段内发出数 目前结余数
A PCS 10 0 20 10 10
B PCS 10 25 10 15 20
谢谢!请各位大侠不吝赐教
表1 材料表,结构是
商品名称 单位 单价 供应商
A PCS 10 A
B PCS 20 B
......
表2 入库表,结构是
商品名称 单位 单价 数量 时间 期数
A PCS 10 20 2008-08-30 200808
B PCS 20 30 2008-07-30 200807
B PCS 20 10 2008-08-30 200808
......
表表3 出库表,结构是
商品名称 单位 单价 数量 时间 期数
A PCS 10 10 2008-08-30 200808
B PCS 20 15 2008-08-20 200808
B PCS 20 5 2008-07-30 200807........
提问:
如何用1条sql语句实现
条件:按照期数(如200808期)进行汇总,期初数是200807期 收入数-发出数商品名称 单位 单价 期初数 本期收入数 本期发出数 结余
A PCS 10 0 20 10 10
B PCS 10 25 10 15 20另外就是按照时间段(开始时间2008-8-1,结束时间2008-8-31)进行汇总,效果如下:商品名称 单位 单价 时间段前余数 时间段内收入数 时间段内发出数 目前结余数
A PCS 10 0 20 10 10
B PCS 10 25 10 15 20
谢谢!请各位大侠不吝赐教
CREATE VIEW view1
AS
(select r.期数 ,sum(单价*数量) as 汇总,r.商品名称 from 入库表 r group by r.期数 ,r.商品名称 ) union all (select c.期数 ,-sum(单价*数量) as 汇总,c.商品名称 from 出库表 c group by c.期数 ,c.商品名称) 然后根据要求
select 商品名称, (select 汇总 from view1 where 期数=aa.期数 and 汇总>0) as 进货,(select 汇总 from view1 where 期数=aa.期数 and 汇总 <0) as 出货,(select sum(汇总) from view1 v where cast(v.期数 as int) <=cast(v.期数 as int) and v.商品名称=aa.商品名称) as 结存 from view1 aa group by aa.期数 ,aa.商品名称 order by aa.期数
A PCS 10 0 20 10 10
B PCS 10 25 10 15 20 我试着写得,不对的话请参考吧select CL.商品名称, CL.单位, CL.单价,
case RK0.数量 when null then 0 else RK0.数量 - case CK0.数量 when null then 0 else CK0.数量 end end as 时间段前余数,
case RK1.数量 when null then 0 else RK1.数量 end as 时间段内收入数,
case CK1.数量 when null then 0 else CK1.数量 end as 时间段内发出数,
时间段前余数 + 时间段内收入数 - 时间段内发出数 as 目前结余数
from (select 商品名称, sum(数量) as 数量 from 入库表 where 期数 = '本期数' group by 商品名称) RK1
full outer join (select 商品名称, sum(数量) as 数量 from 入库表 where 期数 = '上期数' group by 商品名称) RK0
on RK0.商品名称 = RK1.商品名称
full outer join (select 商品名称, sum(数量) as 数量 from 出库表 where 期数 = '本期数' group by 商品名称) CK1
on CK1.商品名称 = RK1.商品名称
full outer join (select 商品名称, sum(数量) as 数量 from 出库表 where 期数 = '上期数' group by 商品名称) CK0
on CK0.商品名称 = CK1.商品名称
full outer join (select * from 材料表) CL on CL.商品名称 = CK0.商品名称