2017-07-19 35 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個有用的獨特信息列,接下來的300個只是產品。 –

回答

0

您需要UNPIVOT你的表:

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. 

也許它分解成塊,我m不知道300個UNION ALLs在一個查詢中能夠工作多少。