根据开始和结束数字生成行?

时间:2019-01-23 23:08:23

标签: sql sql-server

说我有一个这样的表:

member  start_year  end_year
John    2013        2017

如何生成

member  year
John    2013
John    2014
John    2015
John    2016
John    2017

在SQL中?

1 个答案:

答案 0 :(得分:1)

典型的解决方案涉及递归CTE。首先,首先选择所有成员,然后递归UNION ALL,直到结束。

WITH cte
AS
(
SELECT t.member,
       t.start_year year
       FROM elbat t
UNION ALL
SELECT t.member,
       c.year + 1
       FROM cte c
            INNER JOIN elbat t
                       ON t.member = c.member
       WHERE c.year + 1 <= t.end_year
)
SELECT *
       FROM cte;

db<>fiddle