2014-11-13 41 views
0

我似乎無法找到更直接的解決方案。我正在嘗試使用多個字段的表格,並將這些信息「轉向」到具有更靈活數據格式的表格。SQL - 將每行的列轉換爲新的表格格式

我有以下總結表:

Item | Info1 | Info2 | Date1 | Date2 
------------------------------------- 
item1 info11 info12 date11 date12 
item2 info21 info22 date21 date22 

差不多我想這個表是不是「一個」一「多」表,並希望以下內容:

Item | Info | Date 
-------------------- 
item1 info11 date11 
item1 info12 date12 
item2 info21 date21 
item2 info22 date22 

的我正在處理的表有更多的領域,但這基本上是我在SQL代碼中苦苦掙扎的概念。我可以想象,運行一個while循環來執行每條記錄的數據透視,或者可能更容易一些?

回答

2

這實際上不是PIVOTPIVOT函數將行轉換爲列,您想要UNPIVOT將多列轉換爲行。

由於您使用的是SQL Server 2008中,你可以使用CROSS APPLY到逆轉置的雙列:

select 
    c.item, 
    c.info, 
    c.date 
from yourtable t 
cross apply 
(
    select item, info1, date1 union all 
    select item, info2, date2 
) c (item, info, date); 

SQL Fiddle with Demo

這也使用UNION ALL查詢來完成:

select item, info1, date1 
from yourtable 
union all 
select item, info2, date2 
from yourtable 

請參閱SQL Fiddle with Demo

+0

哇!比我讀過的要簡單得多。謝謝!這將像魅力一樣工作。 – thomas