如何对 Excel 中的数据使用 SQL 查询
Excel 提供了 Filter、透视表、Subtotal 等内置查询功能,但这些界面操作有时反而比较繁琐,也不够灵活。对于某些有 SQL 经验的人来讲,如果能直接用 SQL 查询数据就方便多了。
比如下面这张销售订单表:
A |
B |
C |
D |
E |
|
1 |
sales 2009-2013 |
||||
2 |
OrderID |
Client |
SellerId |
Amount |
OrderDate |
3 |
26 |
TAS |
1 |
2142.4 |
2009-08-05 |
4 |
33 |
DSGC |
1 |
613.2 |
2009-08-14 |
5 |
84 |
GC |
1 |
88.5 |
2009-10-16 |
6 |
133 |
HU |
1 |
1419.8 |
2010-12-12 |
7 |
32 |
JFS |
3 |
468 |
2009-08-13 |
8 |
39 |
NR |
3 |
3016 |
2010-08-21 |
9 |
43 |
KT |
3 |
2169 |
2009-08-27 |
10 |
71 |
JFE |
3 |
240.4 |
2010-10-01 |
11 |
99 |
RA |
3 |
1731.2 |
2009-11-05 |
12 |
… |
… |
4 |
4031 |
2010-07-29 |
目标:求2009 年每个销售员(C 列)的订单数,结果贴在 G 到 H 列。如下图:
A |
B |
C |
D |
E |
F |
G |
H |
|
1 |
sales 2009-2013 |
|||||||
2 |
OrderID |
Client |
SellerId |
Amount |
OrderDate |
sellerid |
orderNum |
|
3 |
26 |
TAS |
1 |
2142.4 |
2009-08-05 |
1 |
3 |
|
4 |
33 |
DSGC |
1 |
613.2 |
2009-08-14 |
3 |
3 |
|
5 |
84 |
GC |
1 |
88.5 |
2009-10-16 |
… |
… |
|
6 |
133 |
HU |
1 |
1419.8 |
2010-12-12 |
|||
7 |
32 |
JFS |
3 |
468 |
2009-08-13 |
|||
8 |
39 |
NR |
3 |
3016 |
2010-08-21 |
|||
9 |
43 |
KT |
3 |
2169 |
2009-08-27 |
|||
10 |
71 |
JFE |
3 |
240.4 |
2010-10-01 |
|||
11 |
99 |
RA |
3 |
1731.2 |
2009-11-05 |
|||
12 |
… |
… |
4 |
4031 |
2010-07-29 |
如果用SQL 就是一句:select sellerid,count(1) orderNum from table_name where year(OrderDate)=2009 group by sellerid,非常简单。
下面我们来看如何在Excel 里使用 SQL 查询计算数据。
1. 下载集算器职场版并安装,到官网上找就行了
注意要同时下载授权,免费版足够了。安装后执行,会提示加载授权。
2. 用Excel 打开需要计算的文件,比如上例。
3. 选中A2:E12 区域,按 ctrl+C 复制到剪贴板。
4. 切换到集算器,选中A1 格,注意要让光标落到 A1 的编辑状态中,用 ctrl+V,将数据粘贴进 A1 格。
5. 在集算器的A2 格中填入 SQL 语句:$select sellerid,count(1) orderNum from {A1.import@t()} where year(OrderDate)=2009 group by sellerid,注意前面要有一个 $ 符号,这是集算器的约定,from 的内容要写成 {A1.import@t()},表示将 A1 里的字符串转为表格数据以便执行 SQL,@t 表示首行为列名。
6. 按F9 执行,然后点击 A2,右侧可以看到执行结果。
7. 按住shift(以便带上列名),在右侧点击 "copy data" 按钮,将 A2 的计算结果复制到剪贴板。
8. 在Excel 的 G2 单元格,用 ctrl+V 粘贴结果。
OK,大功告成。
再举一个关联计算的例子。比如某Excel 有orders和employee这两个sheet,现在要将两个sheet关联在一起。
前两步见上例。
3. 选中orders sheet 中的列名和数据,Ctrl+C 复制到剪贴板,Ctrl+V 粘贴到 esProc 的 A1 单元格。
4. 类似地,将employee sheet 复制粘贴到 esProc 的 B1 单元格。
5. 在A2 格执行 SQL:$select o.OrderID, o.OrderDate,o.Amount, e.Name, e.Dept
from {A1.import@t()} o left join {B1.import@t()} e on o.sellerID=e.empID
后续步骤见上例。
集算器能支持 SQL92 标准的大部分语法和函数,包括嵌套的子查询,甚至 WITH 都可以。