如何在Access中模拟UNPIVOT?

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语句?


精慕HU
浏览 718回答 3
3回答

神不在的星期二

这个查询...SELECT ID, A, B, C, [Key 1] AS key_fieldFROM tblUnpivotSourceUNION ALLSELECT ID, A, B, C, [Key 2] AS key_fieldFROM tblUnpivotSourceUNION ALLSELECT ID, A, B, C, [Key 3] AS key_fieldFROM 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

炎炎设计

不幸的是,没有简单的方法可以通过访问来做到这一点。您可以使用UNION来获取每个值SELECT ID, A, B, C, [Key 1] As keyFROM TableWHERE [Key 1] = 3UNION ALLSELECT ID, A, B, C, [Key 1] As keyFROM TableWHERE [Key 1] = 57UNION ALLSELECT ID, A, B, C, [Key 2] As keyFROM TableWHERE [Key 2] = 199UNION ALLSELECT ID, A, B, C, [Key 2] As keyFROM TableWHERE [Key 2] = 234UNION ALLSELECT ID, A, B, C, [Key 3] As keyFROM TableWHERE [Key 3] = 452

DIEA

您可以创建一个以所有列名称为值的辅助表(可以使用excel将表的第一行复制到excel>粘贴特殊>转置)在表中创建一个自动增量列,并为此列编制索引创建一个新的交叉联接查询,如下所示SELECT ID, A, B, C       , AUX_TABLE.KEY_FIELD       , DLookUp("[" & [AUX_TABLE].[KEY_FIELD] & "]","TABLE","[ID] = " & [TABLE].[ID]) AS KEY_VALUEFROM TABLE, AUX_TABLE;不利的一面是您必须AUX_TABLE保持这种状态。但是,如果这是一次性的事情,那么这可能是一条路。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

SQL Server