-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 @Result=@ToMonth - @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;

谢谢,

4

1 回答 1

1

我猜你需要生成从 'FM' 到 'TM' 月份的行,试试这个:

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。

更新

语句的结果SELECT可以插入到表中,条件是表中字段的数量和类型与结果相同。INSERTstatement 可以从已执行的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)
于 2013-02-12T08:42:28.190 回答