2013-02-14 60 views
1

我有一張格式如下所示的表格,我想將它分割成所以月份和年份即列的列。 2014年1月,然後是另一列成本。所以有效的每行將被分成12個不同的行,但我不能爲我的生活找出如何處理它。任何幫助將不勝感激根據月份劃分爲許多行

CREATE TABLE dbo.Line14(
    ItemID int IDENTITY(1,1) NOT NULL, 
    Detail nvarchar(max) NULL, 
    Type nvarchar(255) NULL, 
    Cat nvarchar(255) NULL, 
    Jan_14 money NULL, 
    Feb_14 money NULL, 
    Mar_14 money NULL, 
    Apr_14 money NULL, 
    May_14 money NULL, 
    Jun_14 money NULL, 
    Jul_14 money NULL, 
    Aug_14 money NULL, 
    Sep_14 money NULL, 
    Oct_14 money NULL, 
    Nov_14 money NULL, 
    Dec_14 money NULL 
) ON PRIMARY TEXTIMAGE_ON PRIMARY 
GO 
+0

的SQL Server版本使用的是? – 2013-02-14 21:41:21

+0

2012,但我也有訪問2008以及 – user1902540 2013-02-14 21:42:14

+0

細節,類型和貓會有所不同,每年配對?如果不是那麼重複。 – 2013-02-14 21:50:02

回答

3

您應該能夠使用UNPIVOT功能,從列中的數據轉換成行:

select itemid, 
    detail, 
    type, 
    cat, 
    Month, 
    2014 as Year, 
    value 
from Line14 
unpivot 
(
    value 
    for Month in (Jan_14, Feb_14, Mar_14, Apr_14, 
       May_14, Jun_14, Jul_14, Aug_14, 
       Sep_14, Oct_14, Nov_14, Dec_14) 
) unpiv 

SQL Fiddle with Demo

結果將類似於此:

| ITEMID | DETAIL | TYPE | CAT | MONTH | YEAR | VALUE | 
--------------------------------------------------------- 
|  1 | Test | C | blah | Jan_14 | 2014 | 10 | 
|  1 | Test | C | blah | Feb_14 | 2014 | 12 | 
|  1 | Test | C | blah | Mar_14 | 2014 | 45 | 
|  1 | Test | C | blah | Apr_14 | 2014 | 56 | 
|  1 | Test | C | blah | May_14 | 2014 | 89 | 
|  1 | Test | C | blah | Jun_14 | 2014 | 78 | 
|  1 | Test | C | blah | Jul_14 | 2014 | 96 | 
|  1 | Test | C | blah | Aug_14 | 2014 | 35 | 
|  1 | Test | C | blah | Sep_14 | 2014 | 55 | 
|  1 | Test | C | blah | Oct_14 | 2014 | 30 | 
|  1 | Test | C | blah | Nov_14 | 2014 | 99 | 
|  1 | Test | C | blah | Dec_14 | 2014 | 120 | 
+0

從來沒有見過這個功能,真棒再次這個社區是如此的知識!歡呼聲 – user1902540 2013-02-14 21:56:51

+0

@ user1902540快樂的幫助。當你有一個非標準化的表格並且你想標準化數據時,使用'UNPIVOT'函數。 – Taryn 2013-02-14 21:59:08

0

建新表你描述 - 然後寫12所insert as select陳述抓住每個月的貨幣價值和硬編碼的月份值。

+0

足夠公平,我傾向於使事情比我應該更復雜 – user1902540 2013-02-14 21:45:34