2017-07-19 13 views
0

私は抽出に取り組んでおり、私は非常に解決できない問題があります。カラムを値としてカラム名を使用して別のテーブルに変換します

私の抽出は、次のようになります。

+--------+-------+----------+----------+-----+------------+ 
| ID  | Info1 | Product1 | Product2 | ... | Product300 | 
+--------+-------+----------+----------+-----+------------+ 
| 1  | Paul | 2  |   |  |   | 
+--------+-------+----------+----------+-----+------------+ 
| 2  | Steve |   | 1  |  |   | 
+--------+-------+----------+----------+-----+------------+ 
| 3  | Mark | 2  |   |  |   | 
+--------+-------+----------+----------+-----+------------+ 
| ... |  |   |   |  |   | 
+--------+-------+----------+----------+-----+------------+ 
| 150000 | Felix | 1  |   |  | 2   | 
+--------+-------+----------+----------+-----+------------+ 

製品は列として表示されます。だから使い方が簡単ではありません。私は次のように外部表としての製品と私のテーブルを分割したい

+--------+----------+-------+ 
| ID  | Product | Value | 
+--------+----------+-------+ 
| 1  | Product1 | 2  | 
+--------+----------+-------+ 
| 2  | Product2 | 1  | 
+--------+----------+-------+ 
| ... |   |  | 
+--------+----------+-------+ 
| 150000 | Product1 | 1  | 
+--------+----------+-------+ 

は、最初は、この抽出はExcelであるが、私は、この目的のためにアクセスするために移動しました。

私はSQLの基本的な知識は持っていますが、解決策を理解するには十分ではありません。

+1

UNION ALL、300回。 – jarlh

+0

'Info1'カラムはどうですか?それは最終的な出力に必要ですか? – GauravKP

+0

@ GauravKPそれは元のテーブルにとどまります。実際に私は有用なユニークな情報の30-ish列を持ち、次の300は単なる製品です。 –

答えて

0

あなたはあなたのテーブルをアンピボットする必要があります。

https://technet.microsoft.com/en-us/library/ms177410(v=sql.105).aspx

SELECT ID, Product, Value 
FROM 
    (SELECT ID, Product1, Product2, Product3, Product4, Product5 
    FROM products) p 
UNPIVOT 
    (Value FOR Product IN 
     (Product1, Product2, Product3, Product4, Product5) 
)AS unpvt; 
+0

これは、上記の質問の正確な答えを提供していないので、コメントボックスに入れる必要があります。これは、提供されたリンクを使用して参照するための提案として扱うことができます。 – Aby

+0

私はコメントにアクセスできません – Janine

+0

@Janine私の検索の間、私はUNPIVOTについて読んでいます。 私はAccessがそれをサポートしているかどうか完全にはわかりません。 –

1

jarlhが書いたように、唯一のSQLソリューションはこれです:

INSERT INTO TargetTable (ID, Product, Value) 

SELECT ID, 'Product1' AS Product, Product1 AS Value FROM SrcTable WHERE Product1 IS NOT NULL 
UNION ALL 
SELECT ID, 'Product2' AS Product, Product2 AS Value FROM SrcTable WHERE Product2 IS NOT NULL 
UNION ALL 
etc. 

たぶんチャンクにそれを分割し、私は」 1つのクエリで300 UNION ALLがどれくらいうまく機能するかわかりません。

関連する問題