Access 2016:如何将多表关联的特征数据转为列展示的表格查询
在Access 2016中实现产品特征的行转列展示
现有数据表
TbProducts
productId | descriptionProduct 1 | PC1 2 | PC2
TbCaracteristics
CaracId | DescriptionCarac 1 | Motherboard size 2 | Processor 3 | Color 4 | Size
TbCaracteristicsProducts
productId | CaracId | Value 1 | 1 | ATX 1 | 2 | i5 1 | 3 | Black 1 | 4 | Big tower 2 | 1 | MiniITX 2 | 2 | i7 2 | 3 | Blue 2 | 4 | Big tower
目标展示效果
需要将产品特征从行数据转为列展示:
Product | Motherboard size | Processor | Color | Size PC1 | ATX | i5 | Black | Big tower PC2 | MiniITX | i7 | Blue | Big tower
解决方案
Access 2016中,**交叉表查询(Crosstab Query)**是处理这类行转列需求的标准方案,无需手动用min()/max()逐个处理多列。
方式1:通过查询设计器可视化创建
- 打开查询设计界面,添加三个数据表,并建立关联:
TbProducts.productId↔TbCaracteristicsProducts.productIdTbCaracteristics.CaracId↔TbCaracteristicsProducts.CaracId
- 在顶部菜单栏的「查询类型」中选择「交叉表查询」
- 设置各字段的交叉表属性:
- 选择
descriptionProduct字段,设置为行标题,可将其别名改为Product - 选择
DescriptionCarac字段,设置为列标题 - 选择
Value字段,设置为值,汇总函数选择「First」(因每个产品+特征的组合唯一,First/Last结果一致)
- 选择
- 运行查询,即可得到目标格式的结果。
方式2:直接执行SQL语句
若偏好手写SQL,可运行以下代码:
TRANSFORM First(TbCaracteristicsProducts.Value) AS FeatureValue SELECT TbProducts.descriptionProduct AS Product FROM TbCaracteristics INNER JOIN (TbProducts INNER JOIN TbCaracteristicsProducts ON TbProducts.productId = TbCaracteristicsProducts.productId) ON TbCaracteristics.CaracId = TbCaracteristicsProducts.CaracId GROUP BY TbProducts.descriptionProduct PIVOT TbCaracteristics.DescriptionCarac;
语句说明:
TRANSFORM:指定交叉表的值字段及汇总方式,这里用First()是因为每个产品对应特征的取值唯一GROUP BY:定义行分组的依据,即按产品名称分组PIVOT:指定需要转为列的字段,也就是特征名称
内容的提问来源于stack exchange,提问作者Sorbet
相关产品推荐
相关产品推荐

