学习EXCEL王佩丰老师数据透视表 SQL语句整理
本文整理了常见 Excel SQL(Access 引擎 / ODBC / OLEDB)查询的写法,包括单表查询、合并多表、增加标识、跨文件查询、以及多表 JOIN。
1. 引用单张 Excel 工作表
select * from [数据$]
2. 合并(UNION)多张结构相同的表
方式一:直接 select *
select * from [苏州$]
union all
select * from [无锡$]
union all
select * from [昆山$]
方式二:明确字段(推荐)
select 日期, 产品类别, 金额 from [苏州$]
union all
select 日期, 产品类别, 金额 from [无锡$]
union all
select 日期, 产品类别, 金额 from [昆山$]
3. 合并多表并增加“城市”标识字段
用 A.* 方式(表结构完全一致时)
select '苏州' as 城市, A.* from [苏州$] as A
union all
select '无锡' as 城市, B.* from [无锡$] as B
union all
select '昆山' as 城市, C.* from [昆山$] as C
手动指定字段方式(更安全)
select '苏州' as 城市, 日期, 产品类别, 金额 from [苏州$]
union all
select '无锡' as 城市, 日期, 产品类别, 金额 from [无锡$]
union all
select '昆山' as 城市, 日期, 产品类别, 金额 from [昆山$]
4. 合并结构不同的表(用 null 对齐列)
UNION 的规则:列数一致、顺序一致。
示例:汇总实际完成 + 计划完成
select
'实际完成' as 类型,
日期,
销售部门,
所属区域,
产品类别,
金额
from [销售数据$]
union all
select
'计划完成' as 类型,
计划日期 as 日期,
null as 销售部门,
所属区域,
产品类别,
金额
from [销售计划$]
5. 合并计划销量 + 实际销量
select
'实际销量' as 类型,
日期,
销售部门,
所属区域,
产品类别,
金额
from [销售数据$]
union all
select
'计划销量' as 类型,
null as 日期,
销售部门,
所属区域,
产品类别,
金额
from [销售计划$]
6. 引用其他 Excel 文件中的工作表
使用 OLEDB/ODBC 格式:
select
'南京' as 城市,
'宠物用品' as 产品类别,
A.*
from [Excel 8.0;HDR=YES;Database=e:\数据\数据1\南京.xls].[宠物用品$] as A
多城市多产品类别(合并示例)
select '南京' as 城市,'宠物用品' as 产品类别, A.*
from [Excel 8.0;HDR=YES;Database=e:\数据\数据1\南京.xls].[宠物用品$] as A
union all
select '南京', '警告标志', B.*
from [Excel 8.0;HDR=YES;Database=e:\数据\数据1\南京.xls].[警告标志$] as B
union all
select '南京', '户外睡袋', C.*
from [Excel 8.0;HDR=YES;Database=e:\数据\数据1\南京.xls].[户外睡袋$] as C
union all
select '苏州', '宠物用品', D.*
from [Excel 8.0;HDR=YES;Database=e:\数据\数据1\苏州.xls].[宠物用品$] as D
union all
select '苏州', '警告标志', E.*
from [Excel 8.0;HDR=YES;Database=e:\数据\数据1\苏州.xls].[警告标志$] as E
union all
select '苏州', '户外睡袋', F.*
from [Excel 8.0;HDR=YES;Database=e:\数据\数据1\苏州.xls].[户外睡袋$] as F
7. 两表关联(JOIN)
最基础的 LEFT JOIN
select *
from [数据$]
left join [产品信息$]
on [数据$].产品类别 = [产品信息$].品名
指定字段
select [数据$].产品类别, [产品信息$].产品单价
from [数据$]
left join [产品信息$]
on [数据$].产品类别 = [产品信息$].品名
先取产品单价,再取全部数据
select B.产品单价, A.*
from [数据$] as A
left join [产品信息$] as B
on A.产品类别 = B.品名
常用表别名写法
select A.产品类别, A.数量, B.产品单价
from [数据$] as A
left join [产品信息$] as B
on A.产品类别 = B.品名
8. 多表 JOIN(层层关联)
JOIN 产品信息 + 促销信息
select
A.*,
B.[P/N],
B.产品单价,
C.折扣
from [数据$] as A
left join [产品信息$] as B
on A.产品类别 = B.品名
left join [促销信息$] as C
on A.产品类别 = C.品名