日期:2014-05-18  浏览次数:20700 次

求将一个范围的值一一列出来!
我有这样一张表,要求把表中的区段范围一一列出来如B表:
A表:
name name2 beginnum endnum
东东 嘻嘻 2000 30000
东东 哈哈 40000 60000
龙龙 菜菜 1000 20000
呼呼 哄哄 283192 1234320


B表:
name name2 beginnum endnum numid
东东 嘻嘻 2000 30000 2000
东东 嘻嘻 2000 30000 2001
东东 嘻嘻 2000 30000 2002
东东 嘻嘻 2000 30000 2003
东东 嘻嘻 2000 30000 2004
......
东东 嘻嘻 2000 30000 30000
东东 哈哈 40000 60000 40000
东东 哈哈 40000 60000 40001
东东 哈哈 40000 60000 40002
东东 哈哈 40000 60000 40003
东东 哈哈 40000 60000 40004
东东 哈哈 40000 60000 40005
东东 哈哈 40000 60000 40006
......
东东 哈哈 40000 60000 60000
龙龙 菜菜 1000 20000 1000
龙龙 菜菜 1000 20000 1001
龙龙 菜菜 1000 20000 1002
龙龙 菜菜 1000 20000 1003
......
龙龙 菜菜 1000 20000 20000
呼呼 哄哄 283192 1234320 283192
呼呼 哄哄 283192 1234320 283193
呼呼 哄哄 283192 1234320 283194
呼呼 哄哄 283192 1234320 283195
呼呼 哄哄 283192 1234320 283196
......
呼呼 哄哄 283192 1234320 1234320  


------解决方案--------------------
SQL code
if object_id('[A]') is not null drop table [A]
go
create table [A]([name] varchar(4),[name2] varchar(4),[beginnum] int,[endnum] int)
insert [A]
select '东东','嘻嘻',2000,30000 union all
select '东东','哈哈',40000,60000 union all
select '龙龙','菜菜',1000,20000 union all
select '呼呼','哄哄',283192,1234320
go

;with sn as(
select top 1000000 rn=row_number() over(order by getdate()) from sys.objects,sys.columns
)
select a.*,a.beginnum+b.rn-1 as numid
from a
join sn b on a.beginnum+b.rn-1<=a.endnum
order by name,name2,numid