2013-02-12 73 views
-3

我有一條記錄,我希望根據月份進行拆分。 當我正在做拆分時,我試圖按原樣複製所有數據,但只是有意增量地更改FromMonth字段。根據型號年末月份拆分多條記錄

對於離,

Record to be split: 
    c1 c2 c3 c4 FromMonth ToMonth Y 
    --------------------------------------- 
    AA BB CC DD Feb   Dec 2013 


    Resultant Records: 
    1.) 

    c1 c2 c3 c4 FromMonth ToMonth Y 
    --------------------------------------- 
    AA BB CC DD Mar   Dec 2013 

    2.) 
    c1 c2 c3 c4 FromMonth ToMonth Y 
    --------------------------------------- 
    AA BB CC DD Apr  Dec 2013 

    3.) 
    c1 c2 c3 c4 FromMonth ToMonth Y 
    --------------------------------------- 
    AA BB CC DD May   Dec 2013 
    . 
    . 
    . 
    . 

任何建議或方法去將是有益的。

這裏是香港專業教育學院做了什麼,即時通訊新的,我只是學習:

DECLARE @FromMonth Int; 
    DECLARE @ToMonth Int; 
    DECLARE @Result int; 
    DECLARE @C1 int; 
    DECLARE @C2 int; 
    DECLARE @C3 int; 
    DECLARE @C4 decimal(20,8); 
    DECLARE @C5 uniqueidentifier; 
    DECLARE @C6 varchar(1000); 
    DECLARE @C7 int; 
    DECLARE @C8 int; 
    DECLARE @C9 int; 
    DECLARE @C10 bit; 
    DECLARE @C11 date; 
    DECLARE @C12 date; 
    set @FromMonth = (select FromMonth from master..t where t.c1=1); 
    set @ToMonth = (select ToMonth from master.t where t.c1=1); 
    set @[email protected] - @FromMonth; 

    while(@Result!=0) 
    begin 
    set @FromMonth = @FromMonth+1 
    insert into master..t(c1,c2,c3,c4,c5,c6,c7,c8,c9,c10,c11,c12,FromMonth,ToMonth) 
    values(c1,c2,c3,c4,c5,c6,c7,c8,c9,c10,c11,c12,@FromMonth,ToMonth); 
    set @Result = @Result -1; 
    break; 
    end; 

感謝,

+0

很抱歉,但我真的完全不知道你在說什麼......什麼是「年款月」?我看不到'12'的'TM'值被分成'03'和'04' – freefaller 2013-02-12 08:32:51

+0

+1之間的任何關係,完全不知道你想要做什麼。 – dstronczak 2013-02-12 08:40:47

+0

@ freefaller,@ dstronczak,抱歉沒有具體說明,我所要做的就是複製數據行(多個插入),將FM值一直增加到TM值。 – gaganHR 2013-02-12 12:10:29

回答

1

我猜你需要生成「FM」到「以舊換新」月行,試試這個:

DECLARE @t TABLE (c1 VARCHAR(10),c2 VARCHAR(10),c3 VARCHAR(10),c4 VARCHAR(10),FM VARCHAR(10),TM VARCHAR(10),Y VARCHAR(10)) 
INSERT @t VALUES 
('AA', 'BB', 'CC', 'DD', '02', '12', '13') 

SELECT a.c1 
     , a.c2 
     , a.c3 
     , a.c4 
     , number FM 
     , a.TM 
     , a.Y 
FROM @t a 
JOIN master..spt_values b ON 
     type = 'P' 
AND  number > CAST(a.FM AS INT) AND number <= CAST(a.TM AS INT) 

本示例根據在單行中找到的數據生成新行。它複製除FM字段以外的所有字段,此字段的值爲spt_values.number。表master..spt_values用於生成新行。

例如:

SELECT number 
FROM master..spt_values b 
WHERE type = 'P' 

將生成序號從0到2047加入該表被寫入,使得它產生TM - FM的行數爲3至12。

UPDATE

SELECT語句的結果可以插入到一個表中,條件是表中的數字和字段的類型,結果是一樣的。 INSERT語句可以採取值從執行SELECT語句插入:

INSERT @t 
SELECT a.c1 
     , a.c2 
     , a.c3 
     , a.c4 
     , number FM 
     , a.TM 
     , a.Y 
FROM @t a 
JOIN master..spt_values b ON 
     type = 'P' 
AND  number > CAST(a.FM AS INT) AND number <= CAST(a.TM AS INT) 
+0

,感謝您的回覆,但我似乎並不瞭解加入,我只想複製該行,但只關注將FromMonth值遞增至To Month。 – gaganHR 2013-02-12 12:32:13

+0

不客氣,我添加了使用'master..spt_values'表的解釋。如果沒有'JOIN',在其他具有多行的其他表上生成新的行是不行的。如果您只是學習SQL,請查看一些關於加入的教程,因爲這是數據檢索最重要的操作之一。 – 2013-02-12 13:01:27

+0

非常感謝你,伊萬,它的工作。我如何將值添加回主表? – gaganHR 2013-02-12 13:56:36