首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

sql 每一条记录按步长增加到某一个数,分别写到一个新表 【,速结帐】

2013-01-12 
sql 每一条记录按步长增加到某一个数,分别写到一个新表 【在线等,速结帐】如题:有一个表AA01[编号]A02[名称]

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                                                       500


10001       测试1-550                                                       550
10001       测试1-600                                                       600
10001       测试1-650                                                       650
10001       测试1-700                                                       700
10001       测试1-750                                                       750
10001       测试1-800                                                       800
10001       测试1-850                                                       850
10001       测试1-900                                                       900
10001       测试1-950                                                       950
10001       测试1-1000                                                      1000
10002       测试2-600                                                       600


10002       测试2-650                                                       650
10002       测试2-700                                                       700
10002       测试2-750                                                       750
10002       测试2-800                                                       800
10002       测试2-850                                                       850
10002       测试2-900                                                       900
10002       测试2-950                                                       950
10002       测试2-1000                                                      1000
10003       测试3-800                                                       800
10003       测试3-850                                                       850
10003       测试3-900                                                       900


10003       测试3-950                                                       950
10003       测试3-1000                                                      1000

(25 行受影响)


[解决办法]
引用:
SQL code
?



1234567891011121314151617181920212223242526272829303132333435363738394041

--创建测试数据 Create TABLE #TB (A01 int,A02 varchar(50),A03 varchar(50)) INSERT INTO #TB select '10001',  '测试……
干嘛不用昨晚给你的东西?另外发个东西给你:
http://blog.csdn.net/dba_huangzj/article/details/8309503
[解决办法]

if object_id('testa') is not null drop table testa
go
create table testa(A01 varchar(5),A02 nvarchar(5),a03 int)  --创建表

insert into testa     --插入数据
select '10001',N'测试1',500
union all
select '10002',N'测试2',600
union all
select '10003',N'测试3',800

--使用游标完成
declare @A01 varchar(10),@A02 nvarchar(10),@a03 int
declare @t table (a varchar(10),b nvarchar(10),c int)
declare cur_hh cursor for select * from testa
open cur_hh
fetch next from cur_hh into @a01,@a02,@a03
while @@fetch_status=0
begin
declare @i int
set @i=1
while(@a03<=1000)
begin
declare @t2 varchar(20),@t1 varchar(20)
set @t2=@a02+'-'+cast(@a03 as varchar(20))
set @t1=@a01+'-'+cast(@a03 as varchar(20))
insert into @t select @t1,@t2,@a03
set @a03=@a03+50
set @i=@i+1
end
fetch next from cur_hh into @a01,@a02,@a03
end
select * from @t
close cur_hh
deallocate cur_hh

热点排行
Bad Request.