为了账号安全,请及时绑定邮箱和手机立即绑定

如何在Access中模拟UNPIVOT?

如何在Access中模拟UNPIVOT?

精慕HU 2019-11-20 10:03:16
UNPIVOT可以在MS SQL-Server 2005中使用,但AFAIK在MS Access 2010中不可用。如何使用板载方法实现?例如,我有一张桌子ID | A | B | C | Key 1 | Key 2 | Key 3--------------------------------------- 1 | x | y | z |     3 |   199 |   452 2 | x | y | z |    57 |   234 |   452想要一张桌子ID | A | B | C | Key-------------------- 1 | x | y | z |   3 2 | x | y | z |  57 1 | x | y | z | 199 2 | x | y | z | 234 2 | x | y | z | 452密钥452是一种特殊情况。目前,我在OLEDB / ATL C ++中进行轮换。尽管速度足够快,但我仍然很好奇。什么是Access 2010最有效的SQL语句?
查看完整描述

3 回答

?
神不在的星期二

TA贡献1963条经验 获得超6个赞

这个查询...


SELECT ID, A, B, C, [Key 1] AS key_field

FROM tblUnpivotSource

UNION ALL

SELECT ID, A, B, C, [Key 2] AS key_field

FROM tblUnpivotSource

UNION ALL

SELECT ID, A, B, C, [Key 3] AS key_field

FROM tblUnpivotSource;

...返回此记录集(使用示例表值作为tblUnpivotSource)...


ID A B C key_field

-- - - - ---------

 1 x y z         3

 2 x y z        57

 1 x y z       199

 2 x y z       234

 1 x y z       452

 2 x y z       452


查看完整回答
反对 回复 2019-11-20
?
炎炎设计

TA贡献1808条经验 获得超4个赞

不幸的是,没有简单的方法可以通过访问来做到这一点。您可以使用UNION来获取每个值


SELECT ID, A, B, C, [Key 1] As key

FROM Table

WHERE [Key 1] = 3


UNION ALL


SELECT ID, A, B, C, [Key 1] As key

FROM Table

WHERE [Key 1] = 57


UNION ALL


SELECT ID, A, B, C, [Key 2] As key

FROM Table

WHERE [Key 2] = 199


UNION ALL


SELECT ID, A, B, C, [Key 2] As key

FROM Table

WHERE [Key 2] = 234


UNION ALL


SELECT ID, A, B, C, [Key 3] As key

FROM Table

WHERE [Key 3] = 452


查看完整回答
反对 回复 2019-11-20
?
DIEA

TA贡献1820条经验 获得超2个赞

您可以创建一个以所有列名称为值的辅助表(可以使用excel将表的第一行复制到excel>粘贴特殊>转置)


在表中创建一个自动增量列,并为此列编制索引


创建一个新的交叉联接查询,如下所示


SELECT ID, A, B, C

       , AUX_TABLE.KEY_FIELD

       , DLookUp("[" & [AUX_TABLE].[KEY_FIELD] & "]","TABLE","[ID] = " & [TABLE].[ID]) AS KEY_VALUE

FROM TABLE, AUX_TABLE;

不利的一面是您必须AUX_TABLE保持这种状态。但是,如果这是一次性的事情,那么这可能是一条路。


查看完整回答
反对 回复 2019-11-20
  • 3 回答
  • 0 关注
  • 715 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信