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

如何在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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 08:06:46