ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 Excel Home精品图文教程库
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
300集Office 2010微视频教程 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 4916|回复: 14

[Excel 基础应用] [第49期] 数据透视表应用--数据透视盘点分析

[复制链接]

TA的精华主题

TA的得分主题

发表于 2009-6-21 00:51 | 显示全部楼层 |阅读模式
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
1、.答题前请先阅读最新规则:正式竞赛区运行规则说明
2、.请勿在跟贴中直接发答案(跟帖中如附答案一律不得分).
3、.答案附件请以标准文件名格式发送至我的邮箱:misxml@qq.com

题目说明:
1.、根据给定的数据表( 共4个表),制作出结余表中的结果和效果
2.、完成后的数据透视表为动态表,数据源变动后或数据透视表刷新后,数据透视表按要求随之变动。
3、结余按金额,忽略单价,入库和出库按单价,金额派生。
4、给的结果是没做处理的,这样你们可以发现为什么要求你们做0值处理,请大家正确理解0值处理的问题,因为单价截取小数位时造成了金额上的误差。

实现左边如图的效果

答题要求:
1.、不能改动数据源表中的数据,不能使用辅助列、不能另外使用辅助表。
2.、只能在EXCEL中完成。
3.、使用数据透视表基本操作完成,也可使用其他基本操作方法。
4.、不可使用任何EXCEL函数与公式,不使用VBA。
5.、答案放在答题结果表中,将年-月拖到页字段中也要求结果正确。在期初、入库和出库表中没出现的物料不能出现在结果中。
6、.将答案文件,尤其是EXCEL文件发给我,并在文件名中注明ID号,在答案邮件中注明ID号,否则无法评分!邮箱地址:misxml@qq.com

评分:共5分题
1.满足月盘点得2分,做了0值处理(避免因浮点原因或单价的小数点截取造成的金额的误差)加1分
2.满足固定日期盘点(以25号为例,含25号那天),要做0值处理,另加2分.

6月26号添加了解释,强调年_月拖到页字段也正确的要求。

现收到 小蚁雄兵、shlzml、dcw0402、冻豆腐  的答案,请详细检查你们的答案

[ 本帖最后由 清风_ll 于 2009-7-24 16:13 编辑 ]

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?免费注册

x

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2009-6-21 05:38 | 显示全部楼层
答案已发至版主邮箱,请审阅,谢谢-----小蚁雄兵
  1. SELECT B0.存货编码,B0.存货名称,B0.单位,B0.[年-月],SUM(B1.数量) AS 数量,ccur(SUM(B1.金额)/100)*100 AS 金额  FROM  ( SELECT null as 日期,200900 AS 年月,'期初' as [年-月],存货编码,存货名称,单位  FROM [物料编码$]  UNION ALL  SELECT #2009-1-1# as 日期,format(日期,'yyyymm')*1,format(日期,'yyyy-m'),存货编码,存货名称,单位  FROM [物料编码$]  UNION ALL  SELECT #2009-2-1# as 日期,format(日期,'yyyymm')*1,format(日期,'yyyy-m'),存货编码,存货名称,单位  FROM [物料编码$]  UNION ALL  SELECT #2009-3-1# as 日期,format(日期,'yyyymm')*1,format(日期,'yyyy-m'),存货编码,存货名称,单位  FROM [物料编码$]  UNION ALL  SELECT #2009-4-1# as 日期,format(日期,'yyyymm')*1,format(日期,'yyyy-m'),存货编码,存货名称,单位  FROM [物料编码$]  UNION ALL  SELECT #2009-5-1# as 日期,format(日期,'yyyymm')*1,format(日期,'yyyy-m'),存货编码,存货名称,单位  FROM [物料编码$]  UNION ALL  SELECT #2009-6-1# as 日期,format(日期,'yyyymm')*1,format(日期,'yyyy-m'),存货编码,存货名称,单位  FROM [物料编码$]  UNION ALL  SELECT #2009-7-1# as 日期,format(日期,'yyyymm')*1,format(日期,'yyyy-m'),存货编码,存货名称,单位  FROM [物料编码$]  UNION ALL  SELECT #2009-8-1# as 日期,format(日期,'yyyymm')*1,format(日期,'yyyy-m'),存货编码,存货名称,单位  FROM [物料编码$]  UNION ALL  SELECT #2009- 9-1# as 日期,format(日期,'yyyymm')*1,format(日期,'yyyy-m'),存货编码,存货名称,单位  FROM [物料编码$]  UNION ALL  SELECT #2009-10-1# as 日期,format(日期,'yyyymm')*1,format(日期,'yyyy-m'),存货编码,存货名称,单位  FROM [物料编码$]  UNION ALL  SELECT #2009- 11-1# as 日期,format(日期,'yyyymm')*1,format(日期,'yyyy-m'),存货编码,存货名称,单位  FROM [物料编码$]  UNION ALL  SELECT #2009-12-1# as 日期,format(日期,'yyyymm')*1,format(日期,'yyyy-m'),存货编码,存货名称,单位  FROM [物料编码$] ) B0, ( SELECT IIF ( ISNULL(S1.日期), "200900", FORMAT( IIF( ( SELECT 盘点方式  FROM [M:\49基础\小蚁雄兵_结余结果].盘点方式 ),S1.日期,DATEADD ( "M",1,S1.日期-( SELECT MAX(日历)  from [M:\49基础\小蚁雄兵_结余结果].盘点日 ) ) ),"YYYYMM") )*1 AS 年月,S1.存货编码,S1.数量,S1.金额  FROM  ( SELECT 入库日期 AS 日期,存货编码,1*数量 as 数量,ccur(单价/100)*100*数量 as 金额 FROM [入库明细表$]  UNION ALL  SELECT 出库日期,存货编码,-1*数量,-100*ccur(单价/100)*数量  FROM [出库明细表$]  UNION ALL  SELECT NULL AS 日期,存货编码,1*数量,1*金额  FROM [期初余额$] ) S1 ) B1  WHERE B0.存货编码=B1.存货编码 AND B1.年月<=B0.年月  GROUP BY B0.存货编码,B0.存货名称,B0.单位,B0.[年-月]
复制代码

[ 本帖最后由 BIN_YANG168 于 2009-7-31 13:18 编辑 ]

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?免费注册

x

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2009-6-21 13:43 | 显示全部楼层
我应该能完成它吧!先站位,慢慢做哈。
糟了,做不出来了,只有等版主扣分了!(水平还是低了点!

[ 本帖最后由 fdd 于 2009-6-23 13:29 编辑 ]

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2009-6-23 14:53 | 显示全部楼层
邮件已发,请查收.
月底盘点:
  1. select s.存货名称 as 存货名称,s.单位 as 单位,nnd.年 & '-' & nnd.月 as 年月,x.*  from  ( select '2008' as 年,'12' as 月  from [期初余额$]  union  select year(c.入库日期) as 年,month(c.入库日期) as 月  from [入库明细表$] c  union  select year(d.出库日期) as 年,month(d.出库日期) as 月  from [出库明细表$] d ) nnd, ( select '2008-12-31' as dt,b.存货编码,cdbl(b.数量) as 数量,round(cdbl(b.数量*b.单价),2) as 金额  from [期初余额$] b  union all  select c.入库日期 as dt,c.存货编码,cdbl(c.数量) as 数量,round(cdbl(c.数量*c.单价),2) as 金额  from [入库明细表$] c  union all  select d.出库日期 as dt,d.存货编码,-cdbl(d.数量) as 数量,-round(cdbl(d.数量*d.单价),2) as 金额  from [出库明细表$] d) x,[物料编码$] s  where ((month(x.dt) <= nnd.月 and year(x.dt) = nnd.年) or year(x.dt) < nnd.年) and s.存货编码 = x.存货编码
复制代码
每月25号盘点:
  1. select s.存货名称 as 存货名称,s.单位 as 单位,nnd.年 & '-' & nnd.月 as 年月,x.*  from  ( select '2008' as 年,'12' as 月  from [期初余额$]  union  select year(c.入库日期) as 年,month(c.入库日期) as 月  from [入库明细表$] c  union  select year(d.出库日期) as 年,month(d.出库日期) as 月  from [出库明细表$] d ) nnd, ( select '2008-12-31' as dt,b.存货编码,cdbl(b.数量) as 数量,round(cdbl(b.数量*b.单价),2) as 金额  from [期初余额$] b  union all  select c.入库日期 as dt,c.存货编码,cdbl(c.数量) as 数量,round(cdbl(c.数量*c.单价),2) as 金额  from [入库明细表$] c  union all  select d.出库日期 as dt,d.存货编码,-cdbl(d.数量) as 数量,-round(cdbl(d.数量*d.单价),2) as 金额  from [出库明细表$] d ) x,[物料编码$] s  where ((year(x.dt) < nnd.年) or (year(x.dt) = nnd.年 and month(x.dt) < nnd.月) or (year(x.dt) = nnd.年 and month(x.dt) = nnd.月 and day(x.dt) <= 25)) and s.存货编码 = x.存货编码
复制代码

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2009-6-24 20:31 | 显示全部楼层
已更新答案并发送邮件,请查阅。
月底盘点:
  1. select b.年月,a.存货编码,`物料编码$`.存货名称,`物料编码$`.单位,round(sum(a.金额),4) as 金额,round(sum(a.数量),4) as 数量 FROM  (SELECT `出库明细表$`.出库日期 as 日期, `出库明细表$`.存货编码, -round(`出库明细表$`.单价* `出库明细表$`.数量,4) as 金额, -round(`出库明细表$`.数量,4) as 数量 FROM `出库明细表$` union all SELECT `入库明细表$`.入库日期 as 日期, `入库明细表$`.存货编码,round(   `入库明细表$`.单价*`入库明细表$`.数量,4) as  金额,round(`入库明细表$`.数量,4) as 数量 FROM `入库明细表$` union all SELECT `物料编码$`.启用日期 as 日期, `期初余额$`.存货编码,round( `期初余额$`.单价* `期初余额$`.数量,4) as 金额,round(`期初余额$`.数量,4) as 数量 FROM `期初余额$` , `物料编码$` WHERE `期初余额$`.存货编码 = `物料编码$`.存货编码) a,  (select format(date_table.日期,'yyyy-mm') as 年月 FROM (select `出库明细表$`.出库日期 as 日期  FROM `出库明细表$`  union all select `入库明细表$`.入库日期 as 日期  FROM `入库明细表$`  ) date_table where date_table.日期<=now group by format(date_table.日期,'yyyy-mm')) b,`物料编码$`  where format(a.日期,'yyyy-mm')<=b.年月  and a.存货编码=`物料编码$`.存货编码 group by b.年月,a.存货编码,`物料编码$`.存货名称,`物料编码$`.单位  union all  SELECT '期初' AS '年月', `物料编码$`.存货编码, `物料编码$`.存货名称, `物料编码$`.单位,round( `期初余额$`.金额,4),round( `期初余额$`.数量,4) FROM `期初余额$` `期初余额$`, `物料编码$` `物料编码$` WHERE `期初余额$`.存货编码 = `物料编码$`.存货编码
复制代码
每月25号盘点:
  1. select b.年月,a.存货编码,`物料编码$`.存货名称,`物料编码$`.单位,round(sum(a.金额),4) as 金额,round(sum(a.数量),4) as 数量 FROM  (SELECT `出库明细表$`.出库日期 as 日期, `出库明细表$`.存货编码, -round(`出库明细表$`.单价* `出库明细表$`.数量,4) as 金额, -round(`出库明细表$`.数量,4) as 数量 FROM `出库明细表$` union all SELECT `入库明细表$`.入库日期 as 日期, `入库明细表$`.存货编码,round(   `入库明细表$`.单价*`入库明细表$`.数量,4) as  金额,round(`入库明细表$`.数量,4) as 数量 FROM `入库明细表$` union all SELECT `物料编码$`.启用日期 as 日期, `期初余额$`.存货编码,round( `期初余额$`.单价* `期初余额$`.数量,4) as 金额,round(`期初余额$`.数量,4) as 数量 FROM `期初余额$` , `物料编码$` WHERE `期初余额$`.存货编码 = `物料编码$`.存货编码) a,  (select format(iif(format(date_table.日期,'d')>25,date_table.日期+10,date_table.日期),'yyyy-mm') as 年月 FROM (select `出库明细表$`.出库日期 as 日期  FROM `出库明细表$`  union all select `入库明细表$`.入库日期 as 日期  FROM `入库明细表$`  ) date_table where date_table.日期<=now group by format(iif(format(date_table.日期,'d')>25,date_table.日期+10,date_table.日期),'yyyy-mm')) b,`物料编码$`  where format(iif(format(a.日期,'d')>25,a.日期+10,a.日期),'yyyy-mm')<=b.年月  and a.存货编码=`物料编码$`.存货编码 group by b.年月,a.存货编码,`物料编码$`.存货名称,`物料编码$`.单位  union all  SELECT '期初' AS '年月', `物料编码$`.存货编码, `物料编码$`.存货名称, `物料编码$`.单位,round( `期初余额$`.金额,4),round( `期初余额$`.数量,4) FROM `期初余额$` `期初余额$`, `物料编码$` `物料编码$` WHERE `期初余额$`.存货编码 = `物料编码$`.存货编码
复制代码

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2009-6-29 18:17 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2009-6-30 10:31 | 显示全部楼层
占位邮件已发
月底盘点:
  1. select t1.存货编码,t2.存货名称,iif(isnull(t2.单位),'(空白)',t2.单位) as 单位,t1.expr1001 as  数量 ,t1.expr1002 as 金额 ,iif(t1.月>0,'2009-'&t1.月,' 期初') as '年-月' from (select a.存货编码,sum(a.expr1001),round(sum(a.expr1002),2),b.月 from (SELECT 存货编码,-数量 ,-round(数量* 单价,4) ,datepart('m',出库日期)  FROM `出库明细表$` union all SELECT 存货编码,数量,round(数量*单价,4) ,datepart('m',入库日期)  FROM `入库明细表$` union all SELECT 存货编码,数量 ,round(数量*单价,4),0  FROM `期初余额$`) a,(SELECT DISTINCT iif(c.expr1000<7,c.expr1000,0) as 月  FROM (SELECT datepart('m',出库日期)  FROM `出库明细表$` union  SELECT datepart('m',入库日期)  FROM `入库明细表$` union  SELECT 0  FROM `期初余额$`) c) b where a.expr1003<=b.月 group by 存货编码,b.月) t1,`物料编码$` t2  where t1.存货编码=t2.存货编码
复制代码
每月25号盘点:
  1. select t1.存货编码,t2.存货名称,iif(isnull(t2.单位),'(空白)',t2.单位) as 单位,t1.expr1001 as  数量 ,t1.expr1002 as 金额 ,iif(t1.月>0,'2009-'&t1.月,' 期初') as '年-月' from (select a.存货编码,sum(a.expr1001),round(sum(a.expr1002),2),b.月 from (SELECT 存货编码,-数量 ,-round(数量* 单价,4) ,iif(datepart('d',出库日期)<26,datepart('m',出库日期),datepart('m',出库日期)+1)  FROM `出库明细表$` union all SELECT 存货编码,数量,round(数量*单价,4) ,iif(datepart('d',入库日期)<26,datepart('m',入库日期),datepart('m',入库日期)+1)  FROM `入库明细表$` union all SELECT 存货编码,数量 ,round(数量*单价,4),0  FROM `期初余额$`) a,(SELECT DISTINCT iif(c.expr1000<7,c.expr1000,0) as 月  FROM (SELECT iif(datepart('d',出库日期)<26,datepart('m',出库日期),datepart('m',出库日期)+1)  FROM `出库明细表$` union  SELECT iif(datepart('d',入库日期)<26,datepart('m',入库日期),datepart('m',入库日期)+1)  FROM `入库明细表$` union  SELECT 0  FROM `期初余额$`) c) b where a.expr1003<=b.月 group by 存货编码,b.月) t1,`物料编码$` t2  where t1.存货编码=t2.存货编码
复制代码

[ 本帖最后由 BIN_YANG168 于 2009-7-31 13:04 编辑 ]

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2009-7-5 12:40 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助

好像少了数据吧?

物料编码表中存货代码怎么都是空的?

TA的精华主题

TA的得分主题

 楼主| 发表于 2009-7-29 23:57 | 显示全部楼层
这次没人能拿满分,题目有难度,同时也有陷阱,在入库明细表中输入两个记录日期为
2009-12-25
2009-12-27
这样只有dcw0402出来12月,在25号盘点中没有2010年1月的结余,同时期初日期设置为‘2008-12-31’是个很大的错误,日期大于25号,记录会移到2009年1月去,
小蚁雄兵的优点新颖,用窗体控件链接到单元格,定义两个区域名称,当做数据源在SQL语句中调用,因为数据源已作为OLE DB的连接源,所以这两个定义名称的数据源就要加上文件路径了。
附上各个SQL语句生成的数据透视表结余效果和源文件。
这里提供两个查询效果的各两个SQL语句(共4个):
写法1:利用内层的数据同外层数据进行比较分别求出数量和金额的和,实现的相当于一旦有记录后,每个月进行数据累加功能
select * from
(
select W, Z,存货名称,单位,  
(  
select sum(D)  from   
(  
select 存货编码 as W,year('1/1/2000')&"-"& month('1/1/2000') as Z,datevalue('1/1/2000')*1 as T,数量*1 as D,  金额*1 as P  from [期初余额$]   
UNION ALL     
SELECT 存货编码, year(入库日期)&"-"& month(入库日期),datevalue(入库日期)*1 as T,数量*1,单价 *数量  FROM [入库明细表$]     
UNION ALL     
SELECT 存货编码, year(出库日期)&"-"& month(出库日期),datevalue(出库日期)*1 , 数量*(-1),单价*数量*(-1)  
FROM [出库明细表$]  
)  
where T<=b.S and W=b.W  
)  as D2,  
(  
select sum(P) from   
(  
select 存货编码 as W,year('1/1/2000')&"-"& month('1/1/2000') as Z,datevalue('1/1/2000')*1 as T,数量*1 as D,  金额*1 as P  
from [期初余额$]   
UNION ALL     
SELECT 存货编码, year(入库日期)&"-"& month(入库日期),datevalue(入库日期)*1 as T,数量*1,单价 *数量  FROM [入库明细表$]     
UNION ALL     
SELECT 存货编码, year(出库日期)&"-"& month(出库日期),datevalue(出库日期)*1 , 数量*(-1),单价*数量*(-1)  
FROM [出库明细表$]  
)  
where T<=b.S and W=b.W  
) as P2  
from   
(  
select * from  
(  
select Z,max(T) as S from   
(  
SELECT '1/1/2000' as R,year(R)&"-"& month(R) as Z,datevalue(R)*1 as T  
from [期初余额$]   
UNION ALL     
SELECT 入库日期 as R,year(R)&"-"& month(R),datevalue(R)*1  
FROM [入库明细表$]     
UNION ALL     
SELECT 出库日期 as R,year(R)&"-"& month(R),datevalue(R)*1  
FROM [出库明细表$]  
)  
group by Z  
) e,  
(  
SELECT 存货编码  as W  
from [期初余额$]  
UNION   
SELECT 存货编码  
FROM [入库明细表$]   
UNION     
SELECT 存货编码  
FROM [出库明细表$]  
)  
) b, [物料编码$] f  
where b.W=f.存货编码
)
where D2<>0

写法2: format(T,'yyyy-mm') 这里用了两个m就是为了使字符数完全相同,为后面进行比较提供数据。
该方法就是将几个数据源进行组合,再有条件地将有用的数据框出来,然后对数据进行分组求和。
select w,z,D2,P2,存货名称,单位 from
(
select a.w,b.z, sum(D) as D2,sum(P) as P2  
from
(
select 存货编码 as W,datevalue('1/1/2000')*1 as T,format(T,'yyyy-mm') as z,数量*1 as D,  金额*1 as P  
from [期初余额$]   
UNION ALL     
SELECT 存货编码,datevalue(入库日期)*1 as T,format(T,'yyyy-mm'),数量*1,单价 *数量  FROM [入库明细表$]     
UNION ALL     
SELECT 存货编码,datevalue(出库日期)*1 as T,format(T,'yyyy-mm'), 数量*(-1),单价*数量*(-1)
FROM [出库明细表$]
) a,
(  
select Z
from
(
SELECT datevalue('1/1/2000')*1 as T,format(T,'yyyy-mm') as z
from [期初余额$]   
UNION ALL     
SELECT datevalue(入库日期)*1 as T,format(T,'yyyy-mm')
FROM [入库明细表$]     
UNION ALL     
SELECT datevalue(出库日期)*1 as T,format(T,'yyyy-mm')
FROM [出库明细表$]
)  
group by Z  
) b  
where a.z<=b.z
group by a.w,b.z
) j,[物料编码$] f
where D2<>0 and j.W=f.存货编码



25号盘点:
写法1:利用内层的数据同外层数据进行比较分别求出数量和金额的和,实现的相当于一旦有记录后,每个月进行数据累加功能,IIF(day(R)>25,7,0) 确定累加值多少。7=31-25+1,DateAdd('d',IIF(day(R)>25,7,0),R) 如果当月日期小于25就不加,大于25就加7,使其日期落到下个月
select * from
(
select W, Z,存货名称,单位,
(
select sum(D)
from
(
select '1/1/2000' as R,存货编码 as W,DateAdd('d',IIF(day(R)>25,7,0),R) as T,format(T,'yyyy-m') as Z,数量*1 as D,金额*1 as P
from [期初余额$]
UNION ALL
SELECT 入库日期 as R,存货编码,DateAdd('d',IIF(day(R)>25,7,0),R) as T,format(T,'yyyy-m') ,数量*1,单价 *数量 FROM [入库明细表$]
UNION ALL
SELECT 出库日期 as R,存货编码,DateAdd('d',IIF(day(R)>25,7,0),R) as T,format(T,'yyyy-m'),数量*(-1),单价*数量*(-1)
FROM [出库明细表$]
)
where T<=b.S and W=b.W
) as D2,
(
select sum(P) from
(
select '1/1/2000' as R,存货编码 as W,DateAdd('d',IIF(day(R)>25,7,0),R) as T,format(T,'yyyy-m') as Z,数量*1 as D,金额*1 as P
from [期初余额$]
UNION ALL
SELECT 入库日期 as R,存货编码,DateAdd('d',IIF(day(R)>25,7,0),R) as T,format(T,'yyyy-m') ,数量*1,单价 *数量 FROM [入库明细表$]
UNION ALL
SELECT 出库日期 as R,存货编码,DateAdd('d',IIF(day(R)>25,7,0),R) as T,format(T,'yyyy-m'),数量*(-1),单价*数量*(-1)
FROM [出库明细表$]
)
where T<=b.S and W=b.W
) as P2 from
(
select * from (
select Z,max(T) as S
from
(
select '1/1/2000' as R,DateAdd('d',IIF(day(R)>25,7,0),R) as T,format(T,'yyyy-m') as Z
from
[期初余额$]
UNION ALL
SELECT 入库日期 as R,DateAdd('d',IIF(day(R)>25,7,0),R) as T,format(T,'yyyy-m')
FROM [入库明细表$]
UNION ALL
SELECT 出库日期 as R,DateAdd('d',IIF(day(R)>25,7,0),R) as T,format(T,'yyyy-m')
FROM [出库明细表$]
)
group by Z
) e,
(
SELECT 存货编码  as W
from [期初余额$]
UNION
SELECT 存货编码
FROM [入库明细表$]
UNION
SELECT 存货编码
FROM [出库明细表$]
)
) b, [物料编码$] f
where b.W=f.存货编码
)
where D2<>0

写法2: IIF(day(R)>25,7,0) 确定累加值多少。7=31-25+1,DateAdd('d',IIF(day(R)>25,7,0),R) 如果当月日期小于25就不加,大于25就加7,使其日期落到下个月,format(T,'yyyy-mm') 这里用了两个m就是为了使字符数完全相同,为后面进行比较提供数据。
该方法就是将几个数据源进行组合,再有条件地将有用的数据框出来,然后对数据进行分组求和。
select w,z,D2,P2,存货名称,单位 from
(
select a.w,b.z, sum(D) as D2,sum(P) as P2  
from
(
select 存货编码 as W,'1/1/2000' as R,dateadd('d',IIF(day(R)>25,7,0),R) as T,format(T,'yyyy-mm') as z,数量*1 as D,  金额*1 as P  
from [期初余额$]   
UNION ALL     
SELECT 存货编码,入库日期 as R,DateAdd('d',IIF(day(R)>25,7,0),R) as T,format(T,'yyyy-mm'),数量*1,单价 *数量  FROM [入库明细表$]     
UNION ALL     
SELECT 存货编码,出库日期 as R,DateAdd('d',IIF(day(R)>25,7,0),R) as T,format(T,'yyyy-mm'), 数量*(-1),单价*数量*(-1)
FROM [出库明细表$]
) a,
(  
select Z
from
(
SELECT '1/1/2000' as R,dateadd('d',IIF(day(R)>25,7,0),R) as T,format(T,'yyyy-mm') as z
from [期初余额$]   
UNION ALL     
SELECT 入库日期 as R,DateAdd('d',IIF(day(R)>25,7,0),R) as T,format(T,'yyyy-mm')
FROM [入库明细表$]     
UNION ALL     
SELECT  出库日期 as R,DateAdd('d',IIF(day(R)>25,7,0),R) as T,format(T,'yyyy-mm')
FROM [出库明细表$]
)  
group by Z  
) b  
where a.z<=b.z
group by a.w,b.z
) j,[物料编码$] f
where D2<>0 and j.W=f.存货编码

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?免费注册

x

TA的精华主题

TA的得分主题

发表于 2009-7-31 17:23 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
4月份啊4月份
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

关闭

最新热点上一条 /1 下一条

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-4-20 09:08 , Processed in 0.064477 second(s), 20 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表