Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
564 views
in Technique[技术] by (71.8m points)

sql - Create Temp Table with Range of Numbers

I have a table that has rows with the start and end numbers of a range e.g.

key     startID       endID
 1         500        505
 2         784        788
 3         802        804

and so on..

I would like to create a temp table (or table variable/cte etc) that has a row for each of these numbers and the range they cover between them - i.e. given the above example I would like to see a table with the following rows:

ID
500
501
502
503
504
505
784
785
786
787
788
802
803
804

Can anyone point me in the direction of quick and easy way to achieve this? I thought about using a numbers table somehow but the tables I am looking at have > 200m rows and I don't have a numbers table that big!

Any help is much appreciated. Thanks in advance.

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)
WITH    q AS
        (
        SELECT  startId, endId
        FROM    ranges
        UNION ALL
        SELECT  startId + 1, endId
        FROM    q
        WHERE   startId < endId
        )
SELECT  startId
FROM    q
OPTION  (MAXRECURSION 0)

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...