9

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 语句是什么?

4

3 回答 3

13

这个查询...

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
于 2011-08-31T15:47:28.937 回答
1

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

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
于 2011-08-31T10:26:17.880 回答
0
  1. 您可以创建一个所有列名作为值的辅助表(可以使用 excel 将表的第一行复制到 excel > 特殊粘贴 > 转置)

  2. 在您的表中创建一个自动增量列并索引该列

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

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保持这种工作状态。但如果这是一次性的事情,这可能是要走的路。

于 2017-03-10T19:12:09.903 回答