MS Access查询如何实现行列转置并自动删除全列重复行
MS Access 行列转置自动去冗余行解决方案
结论
该需求完全可以仅通过修改查询实现,无需额外做报表/窗体加载后的后处理操作。
实现逻辑
你已经完成的UNION行转列操作(生成cnPart、DATA、CAT三列,其中CAT为原字段名、DATA为对应字段值)是基础,后续只需要增加两步过滤+转置逻辑即可:
- 先聚合判断每个
CAT分组下的所有值是否完全相同,过滤掉全值相同的分组 - 用过滤后的结果做交叉表转置得到最终结构
具体实现步骤
第一步(可选):将你已写好的UNION查询保存为中间查询,命名为qryUnpivoted
如果不想单独保存中间查询,也可以直接将UNION语句作为子查询嵌套,不影响功能。
第二步:编写带过滤逻辑的交叉表查询
TRANSFORM First(DATA) AS 字段值 SELECT CAT AS 原字段名 FROM qryUnpivoted WHERE CAT IN ( -- 子查询过滤掉所有值完全相同的字段分组 SELECT CAT FROM qryUnpivoted GROUP BY CAT HAVING Nz(MIN(DATA), '') <> Nz(MAX(DATA), '') ) GROUP BY CAT PIVOT cnPart
这里用到
Nz函数是为了兼容字段值为Null的场景,如果你的业务场景下不会出现Null值,可以去掉Nz封装,直接写MIN(DATA) <> MAX(DATA)即可。
逻辑说明
同一个原字段(同一个CAT值)下如果所有行的取值完全相同,那么该分组的最小值和最大值必然相等,HAVING条件会直接把这类分组排除,不需要手动指定要剔除的字段名。
内容的提问来源于stack exchange,提问作者Monika
相关产品推荐
相关产品推荐

