大家好,有个问题咨询下,谢谢:
我有一个表:其中1-12为列名
处理日期 间隔月份 1 2 3 4 5 6 7 8 9 10 11 12
20130203 3
20130504 6
20130101 9
20130203 1
.
.
.
我现在要更新这个表,把处理日期之后按间隔月份做排表,把得到的日期按月份数更新到对应数字的列中,
但是有要求更新的日期年份不能超出处理日期的年份
这个要怎么处理,谢谢各位了
我有一个表:其中1-12为列名
处理日期 间隔月份 1 2 3 4 5 6 7 8 9 10 11 12
20130203 3
20130504 6
20130101 9
20130203 1
.
.
.
我现在要更新这个表,把处理日期之后按间隔月份做排表,把得到的日期按月份数更新到对应数字的列中,
但是有要求更新的日期年份不能超出处理日期的年份
这个要怎么处理,谢谢各位了
create table hc
(处理日期 varchar(12), 间隔月份 int,
[1] varchar(12), [2] varchar(12),
[3] varchar(12), [4] varchar(12),
[5] varchar(12), [6] varchar(12),
[7] varchar(12), [8] varchar(12),
[9] varchar(12), [10] varchar(12),
[11] varchar(12), [12] varchar(12)) insert into hc(处理日期,间隔月份)
select '20130203', 3 union all
select '20130504', 6 union all
select '20130101', 9 union all
select '20130203', 1
declare @clrq varchar(12),@jgyf int,@tsql varchar(6000),@t varchar(12)declare ap scroll cursor for
select 处理日期,间隔月份 from hc
open ap
fetch first from ap into @clrq,@jgyfwhile(@@fetch_status<>-1)
begin
select @t=convert(varchar(12),dateadd(m,@jgyf,@clrq),112)
while (datediff(yy,@clrq,@t)=0)
begin
select @tsql='update hc set ['+rtrim(datepart(m,@t))+']='''+@t+''' '
+' where 处理日期='''+@clrq+''' and 间隔月份='+rtrim(@jgyf)
exec(@tsql)
select @t=convert(varchar(12),dateadd(m,@jgyf,@t),112)
end
fetch next from ap into @clrq,@jgyf
endclose ap
deallocate ap
-- 结果
select * from hc/*
处理日期 间隔月份 1 2 3 4 5 6 7 8 9 10 11 12
------------ ----------- ------------ ------------ ------------ ------------ ------------ ------------ ------------ ------------ ------------ ------------ ------------ ------------
20130203 3 NULL NULL NULL NULL 20130503 NULL NULL 20130803 NULL NULL 20131103 NULL
20130504 6 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 20131104 NULL
20130101 9 NULL NULL NULL NULL NULL NULL NULL NULL NULL 20131001 NULL NULL
20130203 1 NULL NULL 20130303 20130403 20130503 20130603 20130703 20130803 20130903 20131003 20131103 20131203(4 row(s) affected)
*/