如何在MS Access中实现如下数据转换场景?
解决宽表转特定长表的SQL方案
看起来你需要把宽格式的表转换为长格式,并且每一行原始数据要拆分成三行,分别对应test1、test2、test3这三个字段及其值,同时保留rest1和rest2的内容。你之前尝试的transform、pivot可能方向不对,这里用UNION ALL就能完美解决,具体思路是把每个目标字段单独拆成一个查询,再合并结果:
SELECT rest1, rest2, 'test1' AS Filed1, test1 AS filed2 FROM table1 UNION ALL SELECT rest1, rest2, 'test2' AS Filed1, test2 AS filed2 FROM table1 UNION ALL SELECT rest1, rest2, 'test3' AS Filed1, test3 AS filed2 FROM table1 ORDER BY rest1, rest2; -- 可选排序,用来匹配你期望的结果顺序
代码说明:
- 每个
SELECT语句负责提取原始表中的一行数据,将其中一个test*字段映射为Filed1(固定字段名)和filed2(对应字段的值),同时保留rest1和rest2的原始值不变。 - 使用
UNION ALL而非UNION,因为我们需要保留所有拆分后的行(包括重复内容),不会自动去重,正好匹配你期望的结果结构。 - 最后的
ORDER BY是可选的,用来让结果顺序和你给出的示例完全一致,如果你不需要特定顺序可以去掉。
执行这段SQL后,就能得到你期望的输出结果:
rest1 rest2 Filed1 filed2
21 82 test1 1
26 81 test2 a
54 82 test3 z
21 82 test1 2
26 81 test2 s
54 82 test3 z
21 82 test1 2
26 81 test2 a
54 82 test3 z
内容的提问来源于stack exchange,提问作者raja
相关产品推荐
相关产品推荐

