Office中国论坛/Access中国论坛

标题: 如何利用SQL增加累计字段 [打印本页]

作者: anthonywang9    时间: 2012-4-11 21:28
标题: 如何利用SQL增加累计字段
目前有一张分年、月统计计划及实际值的数据表,可以据此作出如下的分月统计数据透视表
[attach]48968[/attach]
但为了便于跟踪累计统计数据(截至每月最后一天),需增加三个字段“累计计划移交数”、“累计实际移交数”及“累计移交率”。我在附件excel表中已利用公式模拟计算出这三个字段的累计数据(其中日期列为辅助列),然后丰富数据后可以据此作出数据透视表形式如下(增加了几条累计折线)[attach]48969[/attach]

请问各位大侠如何利用SQL语句设置查询,以添加上述三个字段的功能。
我能想到的是利用SQL alter add操作语句似乎只能添加字段,如何设置字段的各记录值向各位高手求教。
[attach]48970[/attach]
作者: aslxt    时间: 2012-4-12 17:44
要在excel实现请在其他板块提问,
要在access实现的话:
1、查询到需要的数据是没有问题的
2、累计移交是一个积累的数字,总会远大于某月的数据,这样也会把分月的数据变得很小。
3、好像不能设置次坐标轴,你的移交率(基本就在100%左右)相对太小,在图中就基本看不到了。

作者: aslxt    时间: 2012-4-12 17:44
要在excel实现请在其他板块提问,
要在access实现的话:
1、查询到需要的数据是没有问题的
2、累计移交是一个积累的数字,总会远大于某月的数据,这样也会把分月的数据变得很小。
3、好像不能设置次坐标轴,你的移交率(基本就在100%左右)相对太小,在图中就基本看不到了。

作者: anthonywang9    时间: 2012-4-12 19:04
谢谢aslxt 的再次光临
1、EXCEL附件只是为了利用其公式模拟出累计字段各值的数据,为方便各位大侠理解,平台仍是ACCESS。
2、累计数据会远大于分月数据是一个问题,不知道是否可以通过在数据透视图中设置次坐标,这样主坐标显示分月值(柱状图),次坐标显示累计值(折线图),移交率的字段不需要在数据图中显示,但需要在透视表中显示。
3、如何利用SQL查询语句或者操作语句完成字段的添加及记录值的计算,请aslxt 指教。
再次感激。
作者: anthonywang9    时间: 2012-4-12 23:16
我以同样的问题在excelhome的到了解答,详见附件。设置的sql连接属性为
SELECT 年,月,计划移交,实际移交,DSUM("计划移交","[SHEET1$]","年&月<='"&年&月&"'") as 累计计划移交,DSUM("实际移交","[SHEET1$]","年&月<='"&年&月&"'") as 累计实际移交,累计实际移交/累计计划移交 as 移交率
from [sheet1$a:d]
语句很巧妙的完成了功能,但是我将语句移植于ACCESS平台后,却发现了无奈的一幕,而且此时我只有一个字段。
[attach]48978[/attach]

作者: aslxt    时间: 2012-4-12 23:32
我理解你的数据中,只有【计划移交】、【实际移交】、【日期】三个字段
[attach]48979[/attach]

作者: aslxt    时间: 2012-4-12 23:35
[attach]48980[/attach]
自己看看效果
作者: aslxt    时间: 2012-4-12 23:37
本帖最后由 aslxt 于 2012-4-12 23:38 编辑

我不知道在哪里可以设置次坐标?
同问,有知道的指点一下。
作者: anthonywang9    时间: 2012-4-13 17:31
谢谢aslxt的解答。
1、问题是我的数据源是【计划移交】、【实际移交】、【年】、【月】四个四段,日期字段是需要在sql中用函数实现吗?
2、还有我的access运行这种dsum判断的语句时 总会显示查询过于复杂或者瞬间access运行缓慢。
对了我的源表数据其实是来源于一个联合查询,语句见下表:
SELECT 年,月, sum(计划移交数) AS 计划移交, sum(实际移交数) AS 实际移交
FROM (select format(计划移交日期,"yyyy") as 年,format(计划移交日期,"mm") as 月,count(房间号) AS 计划移交数,0 as 实际移交数
FROM [房间移交详表 的副本]
where not isnull([计划移交日期])
group by format(计划移交日期,"yyyy"),format(计划移交日期,"mm")
UNION ALL select format(实际移交日期,"yyyy") as 年,format(实际移交日期,"mm") as 月, 0 as 计划移交数,count(房间号) AS 实际移交数
FROM [房间移交详表 的副本]
where not isnull([实际移交日期])
group by format(实际移交日期,"yyyy"),format(实际移交日期,"mm"))
GROUP BY 年, 月
我在想是不是嵌套的太多了 请大侠指点。
作者: aslxt    时间: 2012-4-13 17:40
把你的实例上传
作者: anthonywang9    时间: 2012-4-13 23:25
实例见附件,“房间移交分月累计统计查询”的中的SQL语句运行起来就会导致ACCESS平台卡壳。
作者: aslxt    时间: 2012-4-14 20:35
正常的,这种累计都是那样卡壳。数据量大以后要采取其他方法得到你要的结果。
比如建立一个表(你要的结果的那样的),当数据变化后更新表的某行数据,会好得多。
作者: anthonywang9    时间: 2012-4-15 11:41
请问aslxt的意思是不是建立一个含{年/月/计划移交/实际移交/累计计划移交/实际计划移交/移交率}全部字段的表?
可最初建立这样的表记录值通过什么形式的来呢?
当源表更新(如何判断),如何更新对应行的记录值?
请aslxt继续指教?小弟对ADO/DAO都不是很懂。
作者: anthonywang9    时间: 2012-4-17 18:45
自顶,问题急,见谅!




欢迎光临 Office中国论坛/Access中国论坛 (http://www.office-cn.net/) Powered by Discuz! X3.3