如何在Access 2016中通过查询实现表的Transpose/Pivot操作
在Access 2016中实现数据透视(转置):将Customer-Quantity-Month表转换为月度列格式
没问题!在Access里处理这种行列转换,**交叉表查询(Crosstab Query)**是最顺手的方案,完全契合你习惯用查询的需求。下面给你两种实现方式,图形化操作和直接写SQL,你挑顺手的来:
方法一:通过查询向导可视化创建交叉表
如果你喜欢点点鼠标操作,跟着这几步走就行:
- 打开你的Access数据库,切换到创建选项卡,点击查询向导
- 在弹出的窗口里选择交叉表查询向导,点击「确定」
- 选中你要处理的源表,点击「下一步」
- 在「行标题」区域选择
CustomerNo(这就是最终结果里每行对应的客户编号),点击「下一步」 - 在「列标题」区域选择
Month(这就是要转成横向列的月份字段),点击「下一步」 - 在「值」区域选择
Quantity,然后在「函数」下拉框里选Sum(因为每个客户每个月只有一条数据,用Sum/First/Last结果都一样,Sum是最通用的选择),别勾选“包括各行小计”,点击「下一步」 - 给这个查询起个好记的名字(比如
CustomerMonthlyPivot),选择「查看查询」,点击「完成」 - 最后过滤客户:如果只想看11和12号客户,右键查询选择「设计视图」,在
CustomerNo字段的「条件」行输入In (11,12),运行查询就搞定了!
方法二:直接编写SQL语句(高效党首选)
如果你习惯直接写查询语句,用下面这段SQL就行,记得把你的表名替换成实际的表名称:
TRANSFORM Sum(Quantity) AS SumOfQuantity SELECT CustomerNo AS [Customer No.] FROM 你的表名 WHERE CustomerNo In (11,12) GROUP BY CustomerNo PIVOT Month;
简单解释下这段SQL:
TRANSFORM是Access专属的交叉表关键字,指定要聚合的字段(Quantity)和聚合函数(Sum)SELECT定义结果的行标题,这里把CustomerNo重命名为Customer No.,和你要的预期格式完全匹配WHERE子句过滤出仅11和12号客户的记录GROUP BY按客户编号分组,确保每个客户占一行PIVOT把Month字段的每个不同值转成一列,完美实现转置效果
运行这段查询后,你会得到和预期完全一致的结果:
| Customer No. | Jan 18 | Feb 18 | Mar 18 |
|---|---|---|---|
| 11 | 22 | 20 | 18 |
| 12 | 10 | 8 | 15 |
小提醒:如果你的Month字段是日期类型而非文本,记得用Format(Month, "mmm yy")来格式化成年月文本,这样列标题才会和示例一致~
内容的提问来源于stack exchange,提问作者SaravananOS
相关产品推荐
相关产品推荐

