Access数据库中合并相似取值多列并转置为行的实现方法咨询
Access宽表转长表实现方案
Access无内置UNPIVOT功能,可通过联合查询实现字段拆行需求,操作如下:
- 打开Access数据库,点击「创建」-「查询设计」,关闭弹出的表选择窗口后切换到SQL视图
- 如果你需要新表生成和示例一致的独立自增UID,执行以下两步操作:
- 先手动创建空新表,字段设置如下:
- UID:自动编号类型,设为主键
- Name:文本类型
- Field1:文本类型
- 在SQL视图输入以下语句,将
原表名、新表名替换为你实际的表名后执行即可:
INSERT INTO 新表名 (Name, Field1) SELECT t.Name, t.FieldValue FROM ( SELECT Name, Field1 AS FieldValue FROM 原表名 UNION ALL SELECT Name, Field2 AS FieldValue FROM 原表名 UNION ALL SELECT Name, Field3 AS FieldValue FROM 原表名 ) AS t -- 如果不需要test3的记录,取消注释下面的过滤条件 -- WHERE t.Name <> 'test3' ORDER BY t.Name, t.FieldValue DESC; - 先手动创建空新表,字段设置如下:
- 如果你不需要新的自增UID,保留原有UID即可,直接执行以下生成表查询语句即可:
SELECT UID, Name, Field1 AS NewField INTO 新表名 FROM 原表名 UNION ALL SELECT UID, Name, Field2 AS NewField FROM 原表名 UNION ALL SELECT UID, Name, Field3 AS NewField FROM 原表名 -- 过滤不需要的记录可取消注释下面的条件 -- WHERE Name <> 'test3' ORDER BY Name, NewField DESC;
如果源表的Field1/2/3存在空值需要过滤,在每个子SELECT语句末尾加上对应字段的非空判断(例如WHERE Field1 IS NOT NULL)即可。
内容的提问来源于stack exchange,提问作者Stanley LEsniak
相关产品推荐
相关产品推荐

