sql 统计汇总问题

yjwtcham 2007-12-27 10:44:55
目前有一个汇总统计的应用,小弟想了很久,未果。请求各位大哥相助,谢谢大家。
具体业务应用是这样的:
目前有的数据表类型是这样的(入库资料表[主键:MJ001+MJ002+MJ003]):
MJ001 MJ002 MJ003 MJ009 MJ010
1000123 000756 2007-10-01 100 10.5
2006554 000756 2007-10-01 80 15
1000123 000757 2007-10-05 200 11
. . . . .
. . . . .
. . . . .
说明:MJ001[料号],MJ002[采购单号],MJ003[入库日期],MJ009[数量],MJ010[单价];单位这里不考虑

目前有的数据表类型是这样的(领料表[主键:Mo001+Mo002+Mo003]):
Mo001 Mo002 Mo003 Mo006
1000123 010001 2007-10-10 20
1000123 010005 2007-10-15 50
. . . .
. . . .
. . . .
说明:Mo001[料号],Mo002[领料单号],Mo003[领料日期],Mo006[数量];单位这里不考虑


盘点资料表字段有[主键:MI001]:
MI001 MI003 MI004 MI006
1000123 2006-12-01 1000 10000
2006554 2006-12-01 500 7500
3006565 2006-12-01 0 0
. . . .
. . . .
. . . .
说明:MI001[料号],MI003[盘点日期],MI004[数量],MI006[金额];单位这里不考虑

统计汇总的结果如下(利用加权平均算法——这主要用到算领料时的金额):
mi001 mj009 mj010*mj009 mo006 领料金额 mi004 mi006 结存数量 结存金额
1000123 300 3250 70 752.5 1000 10000 1230 12497.5
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .

请各位高手不吝赐教!!
...全文
185 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
yjwtcham 2007-12-29
  • 打赏
  • 举报
回复
谢谢各位了,我自己已经解决了。
-狙击手- 2007-12-28
  • 打赏
  • 举报
回复
dawugui 2007-12-28
  • 打赏
  • 举报
回复
我实在是没看懂楼主要干什么?
ITMiner 2007-12-28
  • 打赏
  • 举报
回复
你最好给点测试数据出来吧,再把会发生的结果展示出来,这样大家更好理解一点,谢谢!
yjwtcham 2007-12-28
  • 打赏
  • 举报
回复
不管怎么样,首先谢谢大家的帮助!
7楼基本上是我想要的结果;但更改后还是未能达到预期结果。
还请大家帮我分析和提供解决方法。具体数据结构表如下:
一、JOMMI[盘点资料表]
其字段为:
MI001[物料编码,主键],
MI002[品名]
MI003[盘点日期]
MI004[盘点数量]
MI005[单位]
MI006[金额]

二、JOMMJ[入库表]
MJ001[物料编码,主键]
MJ002[采购单号,主键]
MJ003[入库日期,主键]
MJ004[送货单号,主键]
MJ008[单位]
MJ009[数量]
MJ010[单价]
MJ011[状态,默认为“0”。0:进货,1:领料,2:退货]

三、JOMMO[领料表]
MO001[物料编码,主键]
MO002[制令单号,主键]
MO003[领料日期,主键]
MO005[单位]
MO006[数量]
MO008[状态,默认为“1”。同上]

四、JOMMR[退货表]
目前退货表性质跟领料一样,相当于出库作业。
MR001[物料编码,主键]
MR003[退货日期]
MR004[数量]
MR005[单位]
MR006[状态,默认为“2”,同上]

我想得到的结果是在某段时间中统计如下显示(单位暂时不考虑,所有单位相同,作加权算法的单价在入库表里抓取,如果领料前无入库,则领料数量单价=盘点金额/盘点数量):
MI001[物料编码] MI004[盘点数量] MI006[盘点数量] MJ009[入库数量] MJ010*MJ009[入库金额] MO006[领料数量] [领料金额] [结存数量] [结存金额]

昵称被占用了 2007-12-27
  • 打赏
  • 举报
回复
只有一个关键地方,搂主没说明,领料单价按什么算法计算

dawugui 2007-12-27
  • 打赏
  • 举报
回复
这算法怎么来的?各数据怎么得出来的
dobear_0922 2007-12-27
  • 打赏
  • 举报
回复
顶1楼,,,
dawugui 2007-12-27
  • 打赏
  • 举报
回复
先顶再看.
-狙击手- 2007-12-27
  • 打赏
  • 举报
回复
入库资料表 MJ001   MJ002 MJ003     MJ009 MJ010
  说明:MJ001[料号],MJ002[采购单号],MJ003[入库日期],MJ009[数量],MJ010[单价];单位这里不考虑
领料表 Mo001 Mo002 Mo003 Mo006
说明:Mo001[料号],Mo002[领料单号],Mo003[领料日期],Mo006[数量];单位这里不考虑
盘点资料表字段有[主键:MI001]:
MI001 MI003 MI004 MI006
说明:MI001[料号],MI003[盘点日期],MI004[数量],MI006[金额];单位这里不考虑
统计汇总的结果如下(利用加权平均算法——这主要用到算领料时的金额):
mi001 mj009 mj010*mj009 mo006 领料金额 mi004 mi006 结存数量 结存金额
--

select mi001,mj009,mj010*mj009,mo006,mo006 * tmp as 领料金额,mi004,mi006,
结存数量= mi004 +mj009 - mo006,结存金额 = mi006 + mj010*mj009 - mo006 * tmp
from 盘点资料表 a
left join(select MJ001,sum(mj009) as mj009,sum(mj009 * mj010) as mj010*mj009,
avg(mj010) as tmp from 入库资料表 group by mjoo1) b on a.mi001 = b.mj001
left join (select mo001,sum(mo006) as mo006 from 领料表 group by mo001) c on a.mi001 = c.mo001
ITMiner 2007-12-27
  • 打赏
  • 举报
回复
select isnull(isnull(a.MJ001,b.Mo001),c.MI001) as MJ001
MJ009,mj010_mj009 ,Mo006 ,
(Mo006 * (case when a.MJ001 is null then MI006/MI004 else 单价 end)) as 领料金额,
MI004,MI006,
mi004 +MJ009-Mo006 as 结存数量,
mi006+mj010_mj009 -(Mo006 *(case when a.MJ001 is null then MI006/MI004 else 单价 end)) as 结存金额

from
(
select MJ001 ,sum(MJ009) as MJ009,sum(MJ009* MJ010) as mj010_mj009 ,sum(MJ010)/count(MJ001) as 单价
from 入库资料表
group by MJ001
)as a
full join
(
select
Mo001,sum(Mo006) as Mo006
from 领料表
group by Mo001
) as b
on b.Mo001=a.MJ001

full join
(
select MI001,MI004,MI006
from 盘点资料表
) as c
on c. MI001=a.MJ001

由于题意不是很明白,
请各位大侠,看哈这样能不能满足要求呢?
希望有更好的改进哈,谢谢!
yjwtcham 2007-12-27
  • 打赏
  • 举报
回复
目前只针对原材料处理,其领料与退货性质相同,即退货也是从库存中领出物料。
结存数量=盘点数量+入库数量-领料数量-退货数量
结存金额=盘点金额+入库金额-领料金额-退货金额
yjwtcham 2007-12-27
  • 打赏
  • 举报
回复
按“加权平均算法”得出。比如在当天统计领料情况时,它的单价是当前入库单价记录数的平均值。如果领料的
物料之前还没有入库记录,则其单价等于盘点金额除以盘点数量

27,580

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 应用实例
社区管理员
  • 应用实例社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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