能用SQL查询实现数据透视表的效果吗?

拓荒号:拓荒牛 (企业头条)

我的目标: 让中国的大学生走出校门的那一刻就已经具备这些Office技能,让职场人士能高效使用Office软件为其服务。支持我,也为自己加油!

微语: 不论面对怎样的世界,都要保持安闲适意的自我。

本节分享SQL中的交叉查询,即利用SQL查询实现数据透视表的效果。 数据源如下:

以上是订单表。 想通过查询显示的结果集为:

前面所有的小节中介绍的SQL查询基本都是结果集中的什么列对应的就是数据源中的什么列,最多就是对某列进行分组、求和、求平均、求最大值、求最小值、四舍五入,提取字段、设置显示格式等等,总之就是原来的列对应过来还是列。

今天这个案例中想要的效果是二维的格式,说白了和数据透视是一样的。

先看下具体的语句:

transform round(sum(订单金额),2) as 金额

select 姓名 from [订单$]

group by 姓名

pivot 月份

什么意思呢?

对照数据透视表是最好理解的了。

首先我们要进行聚合的列是金额列,怎么个聚合法呢?是要进行求和并且四舍五入保留两位小数,同时希望给它起个名字叫金额,所以语句如下:

transform round(sum(订单金额),2) as 金额

接下来考虑行字段里要放什么,直接用select写即可,同时我们要用行字段进行分组,所以有了:

transform round(sum(订单金额),2) as 金额

select 姓名 from [订单$]

group by 姓名

最后结果集中想要把数据源中那一列横向显示,即:

pivot 月份

综合下就是完整的语句:

transform round(sum(订单金额),2) as 金额

select 姓名 from [订单$]

group by 姓名

pivot 月份

思考:假如数据源中没有月份这一列,我们还能透视成案例中的效果吗?

语句如下:

transform round(sum(订单金额),2) as 金额

select 姓名 from [订单$]

group by 姓名

pivot Format(日期,"m月")

本节知识点:

1、交叉查询的语法:

TRANSFROM aggfunction

SELECT statement

PIVOT pivotfield [ in (vlaue1 [,value2 [, …]] ) ]


(职场责编:拓荒牛 )