日期:2014-05-17  浏览次数:20382 次

sql 每一条记录按步长增加到某一个数,分别写到一个新表 【在线等,速结帐】
如题:
有一个表A
A01[编号]     A02[名称]    A03[起始长]
--------------------------------------
10001         测试1        500
10002         测试2        600
10003         测试3        800
...

现在想把表A的数据按A03现在的长度每次增加50一直到1000为止放到一个表B里:
欲得到如下表B:
B01[编号]           B02[名称]          B03[长度]
------------------------------------------------
10001-500           测试1-500          500
10001-550           测试1-550          550
10001-600           测试1-600          600
...
10001-1000          测试1-1000         1000

10002-600           测试2-600          600
...
10002-1000          测试2-1000         1000

10003-800           测试3-800          800
...
10003-1000          测试3-1000         1000

依次类推,一直到长度满1000为止.不就一个存储过程或sql语句。

------解决方案--------------------
这个不难 写个存储过程 添加个while循环 每次取A表一条数据 直至取完,在循环中 设一个变量X赋初始值为该数据的长度,再添加个while循环增加X的值,并插入B表,直至while大于等于1000
------解决方案--------------------
--创建测试数据
Create TABLE #TB (A01 int,A02 varchar(50),A03 varchar(50))
INSERT INTO #TB select '10001',  '测试1', '500'
      union all select '10002', '测试2', '600'
      union all select '10003', '测试3', '800'

--解决方案
select a.A01 as B01,A02 +'-'+cast(A03 + b.number * 50 as varchar(10)) AS B02,cast(A03 + b.number * 50 as varchar(10)) B03 
from #TB a,master..spt_values b 
where b.type='p' and b.number <= (1000-A03)/50
--
/*
B01         B02                                                           B03
----------- ------------------------- ----------
10001       测试1-500                               &nbs