You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在Microsoft Access中实现SQL查询的Pivot(行转列)操作

Microsoft Access SQL 实现客户角色行转列需求

表结构

Table_1(客户角色定义表)

IdName
1Guest
2Registered

Table_2(客户-角色关联表)

IDCustomer_IdCustomerRole_Id
111
212
321
422
531
642

实现方案

方案1:使用Access专属交叉表查询(TRANSFORM)

这是Access中实现行转列最简洁的方式,利用TRANSFORM关键字直接生成交叉表:

TRANSFORM FIRST(t1.Name) AS RoleValue
SELECT t2.Customer_Id
FROM Table_1 t1
INNER JOIN Table_2 t2 ON t1.Id = t2.CustomerRole_Id
GROUP BY t2.Customer_Id
PIVOT 'Name_' & t1.Name;
  • TRANSFORM FIRST(t1.Name):指定取每个客户对应角色的名称(因每个客户-角色组合唯一,FIRST/LAST/MAX效果一致)
  • GROUP BY t2.Customer_Id:按客户ID分组,确保每个客户一行
  • PIVOT 'Name_' & t1.Name:将角色名称拼接成目标列名(如Name_Guest)

方案2:通用SQL聚合+条件判断(兼容更多场景)

如果需要更灵活的列控制,或者习惯标准SQL写法,可以用IIF结合聚合函数实现:

SELECT
    t2.Customer_Id,
    MAX(IIF(t1.Name = 'Guest', t1.Name, NULL)) AS Name_Guest,
    MAX(IIF(t1.Name = 'Registered', t1.Name, NULL)) AS Name_Registered
FROM Table_1 t1
INNER JOIN Table_2 t2 ON t1.Id = t2.CustomerRole_Id
GROUP BY t2.Customer_Id;
  • IIF函数判断当前角色是否匹配目标列,匹配则返回角色名称,否则返回NULL
  • MAX聚合函数过滤NULL值,保留客户实际拥有的角色名称

两种方案都能输出需求格式:每个Customer_Id对应一行,角色作为列展示,无对应角色则显示空值。

内容的提问来源于stack exchange,提问作者Christian Brune

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.28 06:27:31