wps连接(2018年初级会计实务实务)
在上一节中,着重分析了src表结构和描述了查询语句,我将在这一节实现第一步的SQL查询。第一步查询描述如下:
【第一步,先把同一个项目的计划进行初步汇总,形成每条数据都是不同项目的临时查询表。这一步还要加入查询条件,就是图5.3中前三行标黄单元格,去掉无关数据,提高查询效率】
结合同一个项目的分类规则:
【除了项目类别,区分是否是同一个项目,使用 [项目+单位+支出功能分类+政府经济分类+部门经费分类+政府采购] 这六个字段,这六个字段只要有一个不同,就认为这是不同的项目】
再参考图5.5:

项目区分 图5.5
打开记事本,在记事本中录入以下SQL语句:
select * from [src$]
where ([单位]="101013-审计局") and ([计划月份] between "01" and "05")
将记事本中的语句复制;打开 “报表.et” 文件,选择菜单【数据】-【导入数据】-【编辑连接属性】(具体请参考【 4.使用SQL查询连接两个 WPS 工作薄的步骤 】),粘贴从记事本复制的语句(在数据连接窗口编辑SQL语句不方便,以后经常使用这个方法)。如图 6.0

确定后,可以看到审计局的数据已被提取到了报表中。
where ([单位]="101013-审计局") and ([计划月份] between "01" and "05")
//where (`单位`="101013-审计局") and (`计划月份` between "01" and "05")
上面这条 where 语句是设置查询条件,这里面设置了两个条件,一个是从[单位]字段列筛选等于"101013-审计局"的数据,第二个是从[计划月份]字段列筛选包含"01" 至包含 "05"月的数据,这两个条件使用()分割,并使用and 连接表示这两个条件都要符合。
这里面字段列(标题)使用[]或``这两种配对的英文符号标记,英文双引号" "标记字符串。
在 ([单位]="101013-审计局")这个条件中,有时我们不需要全部匹配"101013-审计局",只需提取前面的 6 位编码即可完成查询,可以使用 left([单位],6)="101013"这个条件。left函数是从数据的左边截长度,长度由后面的数字给出。
select * from [src$]
where (left([单位],6)="101013") and ([计划月份] between "01" and "05")
下面我们将重要字段列一一列出,去掉*号(注意,在编辑连接属性时,要把鼠标定位在查询的数据区域内,否则编辑连接属性是不可用的。)
select [单位], [项目], [项目类别], [支出功能分类], [政府经济分类], [部门经济分类],
[是否政府采购], [指标总金额], [指标已用金额], [指标可用金额], [计划金额]
from [src$]
where (left([单位],6)="101013") and ([计划月份] between "01" and "05")
查询结果如图6.1:

查询结果 图 6.1
从查询结果来看,项目的名称不在一起,且金额数据没在项目后面,不利于分析数据,所以在下面的查询语句中要调整字段列显示顺序,还要加上排序order by语句。其中,[指标可用金额]这个字段被替换成计算字段[指标余额],字段列查询显示时使用别名时要用AS,如果不使用别名,那么[指标总金额]- [指标已用金额]这个字段会被命名为Exprxxxx这样的字段,xxxx是一组数字。
注意: 修改SQL语句的时候,要注意中英文符号的差别,SQL语句中的符号都是使用英文的,中文标点符号只能像"。"这样由英文双引号括起来的字符串出现。SQL每个单词中间都建议用空格分开,避免不必要的错误发生 。
select [单位], [项目], [指标总金额], [指标已用金额], [指标总金额]- [指标已用金额] as [指标余额],
[计划金额], [项目类别], [支出功能分类], [政府经济分类], [部门经济分类], [是否政府采购]
from [src$]
where (left([单位],6)="101013") and ([计划月份] between "01" and "05")
order by [项目]
项目排序后的查询结果如图6.2

根据项目分类的规则,可以看出 “乡镇支持工作经费” 不是一个项目,下面的 “公务用车费” 为一个项目。
下面的SQL查询就是先将“公务用车费”这些同一个项目的计划合并汇总。
select [单位], [项目], avg([指标总金额]) as [指标金额], avg([指标已用金额]) as [已用指标],
[指标金额]- [已用指标] as [指标余额], sum( [计划金额]) as [计划合计],
[项目类别], [支出功能分类], [政府经济分类], [部门经济分类], [是否政府采购]
from [src$]
where (left([单位],6)="101013") and ([计划月份] between "01" and "05")
group by [单位], [项目], [项目类别], [支出功能分类], [政府经济分类], [部门经济分类], [是否政府采购]
order by [项目]
上面的语句查询数据如图6.3、图6.4。

合并同一项目 图6.3

合并前项目 图6.4
对比两图数据,可以看到已经成功的完成了对 同一个项目 的合并:
图6.3 红框内的为合并后的项目,蓝框内项目未合并;
图6.4 黄色区域的项目会被合并,红色框内的指标数据不能合计,蓝色的计划要合计,所以红框内的指标数据使用avg这个求组平均数的函数即可达成目的。
avg([源字段名称]) 组平均函数 与sum([源字段名称]) 组合计函数 都是SQL聚合函数。所谓聚合函数,就是它对 一组 行中的某个 列 执行计算,并返回单个值,计算方式有计数、合计、平均数等。SQL聚合函数必须与group by 这个 分组 语句一起使用,group by 必须把select 后面没使用聚合函数的字段一一列出。
那什么是 组 ,分组是什么意思?
用图6.4来说明:
如果用[项目]分组,就有三组:“乡镇支持工作经费”、“公务用车费”、“测算类公用经费”;
如果用[项目类别]分组,只有一组:“公用经费”;
如果使用[项目]+[政府经济分类]分组,就有9组:
乡镇支持工作经费+30231-公务用车运行维护费
乡镇支持工作经费+30211-差旅费
公务用车费+30231-公务用车运行维护费
测算类公用经费+30213-维修(护)费
测算类公用经费+30217-公务接待费
测算类公用经费+30207-邮电费
测算类公用经费+30202-印刷费
测算类公用经费+30211-差旅费
测算类公用经费+30201-办公费
所以,前文中 区分同一个项目的规则: [项目类别+项目+单位+支出功能分类+政府经济分类+部门经费分类+政府采购] ,这其实就是分组语句了。
avg([源字段名称])这里面的 “源字段名称” 的意思是必须是 from 查询的表或者子查询中的字段,不能使用as 命名的别名,在上面的查询中,就不能使用[指标金额]、[已用指标]、[指标余额]、[计划合计]这些字段别名。
字段别名可以用于非聚合的计算,字段别名最好不要与已有的字段名重名,这不利于阅读、调试和排查错误。
把表名加在字段前面使用的方法:
select [src$].[单位], [src$].[项目], [src$].[指标总金额] AS [指标总金额] , [src$].[指标已用金额],
[src$].[指标总金额]- [src$].[指标已用金额] as [指标余额]
from [src$]
where (left([单位],6)="101013") and ([计划月份] between "01" and "05")
order by [项目]
使用[src$].[单位]这种方式有点麻烦,所以可以对[src$] 这样的表和子查询使用别名:
select s.[单位], s.[项目], s.[指标总金额] AS [指标总金额] , s.[指标已用金额],
s.[指标总金额]- s.[指标已用金额] as [指标余额]
from [src$] as s
where (left(s.[单位],6)="101013") and (s.[计划月份] between "01" and "05")
order by s.[项目]
from [src$] as s 这个as可以用空格代替:from [src$] s,而字段别名的as则不能使用空格代替。
这一节中,成功的达成了 第5节 中的第一步查询的目标,下一节我将完成查询的第二步。
本文内容来自互联网,请自行判断内容的正确性。若本站收录的内容无意侵犯了贵司版权,且有疑问请给我们来信,我们会及时处理和回复。 转载请注明出处: http://www.zivvi.com/redian/1232.html wps连接(2018年初级会计实务实务)