日期:2014-05-16  浏览次数:20606 次

请教一个存储过程,根据行次的不同分拆数据到新表中。
一、表结构如下:
 
CREATE TABLE [dbo].[Table_oldmx](
[pc] [varchar](20) NULL,
[name] [varchar](20) NULL,
[gz] [decimal](18, 2) NULL
) ON [PRIMARY]

CREATE TABLE [dbo].[Table_newmx](
[pc] [varchar](20) NULL,
[name] [varchar](20) NULL,
[gz] [decimal](18, 2) NULL
) ON [PRIMARY]

二、测试数据如下:

insert into Table_oldmx(pc,name,gz) values('pc001','aaa',1001)
insert into Table_oldmx(pc,name,gz) values('pc001','bbb',1002)
insert into Table_oldmx(pc,name,gz) values('pc001','ccc',1003)
insert into Table_oldmx(pc,name,gz) values('pc001','ddd',1004)
insert into Table_oldmx(pc,name,gz) values('pc001','eee',1005)
insert into Table_oldmx(pc,name,gz) values('pc001','fff',1006)
insert into Table_oldmx(pc,name,gz) values('pc001','ggg',1007)
insert into Table_oldmx(pc,name,gz) values('pc001','hhh',1008)
insert into Table_oldmx(pc,name,gz) values('pc001','iii',1009)
insert into Table_oldmx(pc,name,gz) values('pc001','jjj',1010)
insert into Table_oldmx(pc,name,gz) values('pc001','kkk',1011)
insert into Table_oldmx(pc,name,gz) values('pc001','mmm',1012)
insert into Table_oldmx(pc,name,gz) values('pc001','nnn',1013)
insert into Table_oldmx(pc,name,gz) values('pc001','mmm',1014)
insert into Table_oldmx(pc,name,gz) values('pc001','nnn',1015)
insert into Table_oldmx(pc,name,gz) values('pc001','nnn',1016)

三、要将原表Table_oldmx的数据,根据每批行数,分拆每批的数据到新表中。效果如下:

(要注意pc字段的数据变化)

3.1 当每一个批次为4行时,原表pc字段分拆为4个批次并插入结构一样的新表中。
pc              name     gz
----------------------------------------
pc001001 aaa 1001.00
pc001001 bbb 1002.00
pc001001 ccc 1003.00
pc001001 ddd 1004.00
pc001002 eee 1005.00
pc001002 fff 1006.00
pc001002 ggg 1007.00
pc001002 hhh 1008.00
pc001003 iii 1009.00
pc001003 jjj 1010.00
pc001003 kkk 1011.00
pc001003 mmm 1012.00
pc001004 nnn 1013.00
pc001004 mmm 1014.00
pc001004 nnn 1015.00
pc001004 nnn 1016.00

3.2 当每一个批次为6行时,原表pc字段分拆为3个批次并插入结构一样的新表中。
pc              name     gz
----------------------------------------
pc001001 aaa 1001.00
pc001001 bbb 1002.00
pc001001 ccc 1003.00
pc001001 ddd 1004.00
pc001001 eee 1005.00
pc001001 fff 1006.00
pc001002 ggg 1007.00
pc001002 hhh 1008.00
pc001002 iii 1009.00
pc001002 jjj 1010.00
pc001002 kkk 1011.00
pc001002 mmm 1012.00
pc001003 nnn 1013.00
pc001003 mmm 1014.00
pc001003 nnn 1015.00
pc001003 nnn 1016.00

------解决方案--------------------
CREATE TABLE #old([pc] [varchar](20),[name] [varchar](20),[gz] [decimal](18, 2) ) 

insert into #old(pc,name,gz) values('pc001','aaa',1001)
insert into #old(pc,name,gz) values('pc001','bbb',1002)
insert into #old(pc,name,gz) values('pc001','ccc',1003)
insert into #old(pc,name,gz) values('pc001','ddd',1004)
insert into #old(pc,name,gz) values('pc001','eee',1005)
insert into #old(pc,name,gz) values('pc001','fff',1006)
insert into&nbs