一尘不染

用数字范围创建临时表

sql

我有一个表,其中的行带有范围的开始和结束编号,例如

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

等等..

我想创建一个临时表(或表变量/ cte等),其中每个数字都有一行,并且它们之间的范围也包括在内-即给出上述示例,我希望看到一个具有以下行的表:

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

谁能指出我朝着实现这一目标的快捷方式的方向?我考虑过以某种方式使用数字表,但是我正在查看的表具有> 200m行,而我没有那么大的数字表!

任何帮助深表感谢。提前致谢。


阅读 141

收藏
2021-03-10

共1个答案

一尘不染

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)
2021-03-10