在MS Access中将单列数据转为列标题及解决PIVOT SQL不兼容问题
语法兼容性及实现方案
兼容性说明
你提供的SQL确实与Access不兼容,主要不匹配点如下:
- 该代码是Oracle专属语法,Access没有原生支持
PIVOT关键字的透视表子句 nvl()是Oracle提供的空值处理函数,Access不存在该函数,同等功能可以用NZ()函数实现
Access行转列实现代码
Access的行转列(将指定列的值转为新表列标题)需要使用专属的TRANSFORM语句完成,对应你需求的实现代码如下:
TRANSFORM NZ(SUM(amount), 0) SELECT comp_name FROM main_table GROUP BY comp_name PIVOT code IN ('data1', 'data2', 'data3', 'data4')
代码说明
TRANSFORM后指定聚合逻辑,这里直接用NZ(SUM(amount), 0)将空值转为0,和原Oracle代码的nvl效果完全一致SELECT后指定分组维度字段,这里对应你需要保留的comp_name字段PIVOT后指定要转为列标题的字段code,IN子句里固定要生成的4个列值,运行后会自动生成data1到data4四个列,没有对应数据的位置自动填充为0- 如果你不需要固定生成这4个列,可以删掉
IN ('data1', 'data2', 'data3', 'data4')部分,Access会自动把code字段的所有唯一值都生成为列标题
内容的提问来源于stack exchange,提问作者TomCrow
相关产品推荐
相关产品推荐

