sql 仓库分类汇总?

heitudi1020 2008-09-04 05:15:36
我有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
谢谢!请各位大侠不吝赐教
...全文
90 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
xabcxyz 2008-09-04
  • 打赏
  • 举报
回复
另外就是按照时间段(开始时间2008-8-1,结束时间2008-8-31)进行汇总,效果如下:

商品名称 单位 单价 时间段前余数 时间段内收入数 时间段内发出数 目前结余数
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.商品名称
xac17666 2008-09-04
  • 打赏
  • 举报
回复
基本思路 建个视图
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.期数

tianhuo_soft 2008-09-04
  • 打赏
  • 举报
回复
链表 在分组

目前头晕ing
heitudi1020 2008-09-04
  • 打赏
  • 举报
回复
怎么没有人回答阿?

34,593

社区成员

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

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