9

UNPIVOTはMSSQL-Server2005で使用できますが、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 / ATLC++でローテーションを行っています。それは十分に速いですが、私はまだ興味があります。ここでAccess2010の最も効率的な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

残念ながら、アクセスを使用してこれを行う簡単な方法はありません。これを行うには、を使用し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
于 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しなければならないことです。しかし、これが1回限りの場合は、これが進むべき道かもしれません。

于 2017-03-10T19:12:09.903 に答える