2013-02-12 49 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

相关问题