SQL将范围拆分为单个行

时间:2019-03-15 16:31:15

标签: sql

我有一张这样的桌子:

JOBNO   STARTNO     ENDNO
123     1           5
456     6           7
789     8           10

我需要这样的输出:

STARTNO    JOBNO
1          123
2          123
4          123
5          123
6          456
7          456
8          789
9          789
10         789

2 个答案:

答案 0 :(得分:2)

您要递归cte

with cte as (
     select jobno, startno, endno
     from table t
     union all
     select jobno, startno + 1, endno
     from cte c
     where startno < endno
)
select c.startno, c.jobno
from cte c
order by c.jobno, c.startno;

这假设您正在使用SQL Server运行,否则语法可能会有所不同。

如果option (maxrecursion 0)的间隙更大,请使用startno

答案 1 :(得分:0)

您没有指定DBMS,但是对于Postgres,您可以使用generate_series()

select x.i as startno, j.jobno
from jobs j
  join generate_series(j.startno, j.endno) as x(i) on true;

在线示例:https://rextester.com/RZN4872