2011-08-17 77 views
3

我有一個表有數百W色譜柱的行和幾十:SQL選擇值

Column1 | Column2_W | Column3_W | ColumnX_W 
    123 |  A  |  B  | x 
    223 |  A  | NULL | NULL 

如何選擇它,以便輸出將是:

Column1 | W 
    123 | A 
    123 | B 
    123 | x 
    223 | A 

編輯:我很清楚,我正在與一個可怕的數據庫「設計」。不幸的是我無法改變它。這個問題實際上是我今天交給我的一個更大問題的一部分。我會明天嘗試給出的想法

+0

是否使用的是RDBMS? – Yuck

+0

建議你看看不透明。希望你這樣做是爲了將這些數據轉換爲更規範化的格式,因爲這是一種長期存儲數據的可怕方法。 – HLGEM

回答

2

看看這篇文章:UNPIVOT: Normalizing data on the fly

Unforunately,你會被卡住的手與任何使用的解決方案鍵入列名。下面是使用SQL Server UNPIVOT樣本...

SELECT Column1, W 
FROM YourTable 
UNPIVOT (W for Column1 in (Column2_W, Column3_W /* and so on */)) AS W 
4
SELECT Column1, Column2_W 
FROM table 

UNION ALL 

SELECT Column1, Column3_W 
FROM table 

UNION ALL 

SELECT Column1, Column4_W 
FROM table 
.... 
ORDER BY Column1 

更好的選擇:重新設計你的數據庫!這看起來像電子表格,而不是關係數據庫。

+0

我知道這看起來如何,我很沮喪地使用這樣的數據庫。不幸的是,我沒有辦法做到DB設計 – FableBlaze

0

如果你沒有任何UNPIVOT選項...

SELECT 
    Column1, 
    CASE ColumnID WHEN 2 THEN Column2_W 
       WHEN 3 THEN Column3_W 
       ... 
       WHEN X THEN ColumnX_W 
    END AS Column2 
FROM 
    yourTable 
CROSS JOIN 
    (   SELECT 2 AS ColumnID 
    UNION ALL SELECT 3 
    ... 
    UNION ALL SELECT X 
) 
    AS UnPivot