|
楼主 |
发表于 2021-5-16 19:28
|
显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用 · 内置多项VBA编程加强工具 ★ 免费下载 ★ ★ 使用手册★
本帖最后由 OKJSJSF 于 2021-5-17 22:28 编辑
数据的现有连接的属性的命令文本的SQL语句练习:
select "蜀国" as 簿名, * from (select "刘备" as 表名, * from [G:\office练习\多簿多表联合透视\蜀国.xlsm].[刘备$] union all select "张飞" as 表名, * from [G:\office练习\多簿多表联合透视\蜀国.xlsm].[张飞$] union all select "关羽" as 表名, * from [G:\office练习\多簿多表联合透视\蜀国.xlsm].[关羽$]) union all
select "吴国" as 簿名, * from (select "周瑜" as 表名, * from [G:\office练习\多簿多表联合透视\吴国.xlsm].[周瑜$] union all select "鲁肃" as 表名, * from [G:\office练习\多簿多表联合透视\吴国.xlsm].[鲁肃$] union all select "吕蒙" as 表名, * from [G:\office练习\多簿多表联合透视\吴国.xlsm].[吕蒙$])
分析,如上图,一个文件夹中有三个工作簿,其中蜀吴联盟是存放联合查询数据表或透视表的工作簿,蜀国、吴国是二个存放数据源的将要被联合的工作簿,其中蜀国工作簿中有刘备、张飞、关羽三个工作表,每个工作表结构相同,即列标题相同、标题行相同,或者可以说是字段相同,吴国工作簿中有周瑜、鲁肃、吕蒙三个工作表,每个工作表结构相同,即列标题相同、标题行相同,或者可以说是字段相同。
第一步,联合蜀国工作簿中的刘备、张飞、关羽三个工作表,生成看不见的查询表,查询表包含数据源的所有字段,重复记录也不去除,同时查询表中增加了一个表名字段,字段值是刘备、张飞、关羽,用于区分每行记录的数据来源,来自于哪个工作表。由于是跨工作簿操作,各表名前要加上工作簿的全名。语句如下:
select "刘备" as 表名, * from [G:\office练习\多簿多表联合透视\蜀国.xlsm].[刘备$] union all select "张飞" as 表名, * from [G:\office练习\多簿多表联合透视\蜀国.xlsm].[张飞$] union all select "关羽" as 表名, * from [G:\office练习\多簿多表联合透视\蜀国.xlsm].[关羽$]
特别注意,语句中逗号“ , ”左边不能有空格,父子从属关系之间的点号“ . ”两边不能有空格,括号" ( ) "内侧不需空格。
第二步,在生成的查询表中增加一个工作簿名字段,用于在多个工作簿联合后,区分每行记录的数据来源,来自于哪个工作簿,生成了一个看不见的嵌套了查询表的新查询表。如果只对一个工作簿中的多个工作表联合,则无需增加这个字段。语句如下:
select "蜀国" as 簿名, * from ( 本括号中是第一步的联合语句 )
第三步与第一步相同,对第二个工作簿的多表进行联合,生成第三个查询表。
第四步与第二步相同,对第三步生成的查询增加工作簿名字段,生成第四个查询表。
第五步,对第二个、第四个查询表进行联合,生成最后的查询表,当然仍然看不见。语句如下:
select "蜀国" as 簿名, * from ( 本括号中是第一步的联合语句 ) union all select "吴国" as 簿名, * from ( 本括号中是第四步的联合语句 )
用上述语句创建的数据表或透视表,既可以对其中任何工作簿中的任一工作表进行筛选或透视,也可以对所有工作簿中的所有工作表同时进行筛选或透视。有前辈用“令人惊叹的功能”描述它一点不过。
如果不怕麻烦,各个工作簿也不是非要放在同一个文件夹中,SQL语句很强大。
|
|