现有需求:合并1-3月的所有数据,并完成统计。
传统的方法,我们可以在键盘上依次按着ALT,+D+P来使用多重数据透视来实现,但此法实在不够灵活。
因此,我们同样如之前的文章一样,选择SQL方法来提取数据作为透视表的数据源。
建立链接:数据--现有链接--浏览更多,根据路径选择目标Excel文件即可。
依据路径找到数据源文件:
先选择其中一个工作表建立链接:
结果选择用透视表的方式呈现,点击属性写入SQL语句:
SQL语句为:
select * from [1月$]
union all
select * from [2月$]
union all
select * from [3月$]
结果为:
拖拉数据透视表字段,完成布局,得出想要的结果:
SQL语句中使用"*"号的弊端。
1、SQL是数据库常用的查询语言,其基本要求就是数据得像数据库一样规范,但是往往在Excel中的数据都是不那么规范的;
2、* 表示整表全部数据的意思,如果1月、2月、3月,3个表格的数据其中有一个表格不规范,那么上面的SQL语句就不能够生效。union all要求每个合并的表格字段数,也就是列数一样多,"*"表示所有的行和列,
3、使用"*"来提取数据,对数据的要求比较严格;
4、解决方法,将"*"拆分成为限定为具体的字段,或(同时)限定数据表格的范围:
下面例子中,1月的表格多出了字段1这一列,如果使用"*"提取数据(上面的SQL代码),将得不到结果:
因此,将"*"拆分,限定为具体的字段,SQL语句改为:
select 姓名,部门,月份,业绩 from [1月$]
union all
select 姓名,部门,月份,业绩 from [2月$]
union all
select 姓名,部门,月份,业绩 from [3月$]
或限定数据表格范围,取全部数据也取不到字段1这列数据
select * from [1月$a1:d]
union all
select * from [2月$a1:d]
union all
select * from [3月$a1:d]
总之,在Excel中使用SQL,数据最好最好要规范(不带合并单元格,数据类型一致等等)。
领取专属 10元无门槛券
私享最新 技术干货