2

Excel 数据源的多表合并和 SQL 查询

 3 years ago
source link: https://zhiqiang.org/coding/sql-query-from-multi-excel-data.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

Excel 数据源的多表合并和 SQL 查询

作者: 张志强

, 发表于 2012-09-03

, 共 1375 字 , 共阅读 529 次

系列:办公自动化

查看该系列所有文章

Excel 多表合并和查询是一个应用很广泛的问题。下面是一个简单的例子,我们需要从两张数据表里,得出每个行业的股票波动率平均值。第一个数据表保存了股票和行业的对应关系,有两列,第一列为股票名,第二列为每只股票对应的行业。第二张表保存了各个股票在各个交易日的收盘价和前收盘价,有四列,第一列是股票名,第二列为交易日,第三列和第四列分别为股票在这个交易日的前收盘价和收盘价。

上面例子的一个简单且常用的方法是使用增加辅助列、averageifs、数据透视表之类的函数。但当数据比较大或者逻辑结构比较复杂时,这些函数计算的速度比较慢。杨文博在博客上提到类似的问题,并给出了一个基于 Python 的解决方案。但这样需要安装 Python ,同时修改起来也比较麻烦。下面以上述案例为例子演示 Excel 内部如何支持基于多个表格数据进行查询。

1、单击菜单 数据-自其它来源-来自 Microsoft Query ,之后弹出一个窗口

choose data source

2、选择 Excel Files*点击确定后,进入选择工作簿界面。此处选择包含数据的文件。它可以是你正在编辑的这个文件。再次点击确定后你将进入到以下界面。在该界面上点击左下方的「选项」,在弹出的表选项勾选上「系统表」。确定后可以看到查询向导左侧会出来一些数据表。每一行都是一个数据表其中后缀为'\$'的表为 Excel 文件中的工作表,其它为 Excel 文件中的名称所定义的数据区域。点击左侧的「+」号可以展开看这个数据表的列名。

choose column

3、接下来有几种方式,一种方式是利用查询向导可视化地建立数据库查询语句,另一种方式是直接输入数据库查询语句。我一般使用后者。这时候在上面的「查询向导-选择列」中随意勾选上一列,不断下一步,直到点击完成确定。此时会弹出以下方框:

choose position

4、此时可以选择数据显示为表格形式或者数据透视表 ,并选择数据放置位置。激活刚才选择的位置,点击菜单「数据-属性」,在弹出的窗口再次选择连接属性,进入下图的界面:

connection properties

在命令文本区域输入新的 SQL 查询语句,点击确定,再刷新数据区域即可。

SQL 查询语句是整个操作的核心。这里不谈具体 SQL 语句怎么写,而是介绍下如何引用各种数据表。有以下几种方法:

  • 通过名称引用。比如如果定义一个数据区域为 Industry ,那么select * from industry这样是可行的。这种方法最多支持 65535 行数据,当数据行数过多时, Excel 会提示找不到该数据表。同一张工作表里可以有多个数据表,通过定义不同的名称去引用。
  • 通过工作表名引用。比如一个工作表名为 Quotes ,那么select * from `Quotes$`这样是可行的。这里工作表名后面的$号表示这是一个工作表。工作表可以包含高达 100 万行数据。但同一个工作表内只能有一个数据表。
  • 可以通过数据表的地址进行引用。比如select * from `Quotes$A1:B10000`
  • 上面的引号可以用中括号代替。比如select * from [Quotes$A1:B10000]
  • 如果数据表不在目前工作的文件内,需要在上面的数据表名前添加数据文件的路径和文件名,比如select * from `D:\test.xlsx`.`Quotes$`

上述例子的演示文件

Q. E. D.


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK