如何递归地拆分行

时间:2013-12-05 11:01:40

标签: sql-server tsql

我跟着表:

Id  CreationDate  FromEntryNo  ToEntryNo
 1   2013-01-01        1            4
 2   2013-01-03        5            8
 3   2013-01-05        9           11
...

我想将其拆分为多行,以获得包含所有连续EntryNo的列表,如下所示:

Id  CreationDate  FromEntryNo  ToEntryNo   EntryNo
 1   2013-01-01        1            4         1
 1   2013-01-01        1            4         2
 1   2013-01-01        1            4         3
 1   2013-01-01        1            4         4
 2   2013-01-03        5            8         5
 2   2013-01-03        5            8         6
 2   2013-01-03        5            8         7
 2   2013-01-03        5            8         8
 3   2013-01-05        9           11         9
 3   2013-01-05        9           11        10
 3   2013-01-05        9           11        11
...

我的第一次尝试是使用递归的CTE,但它不起作用:

with cte as
(select gr.Id, gr.CreationDate, gr.FromEntryNo, gr.ToEntryNo, gr.FromEntryNo as [EntryNo]
 from dbo.[Register] gr 
 union all
 select No, CreationDate, FromEntryNo, ToEntryNo, EntryNo + 1 from cte where EntryNo <= ToEntryNo
)
select Id, CreationDate, FromEntryNo, ToEntryNo, EntryNo from cte
&LT;

知道如何使用一个SQL查询执行此操作吗?

1 个答案:

答案 0 :(得分:1)

with cte as
(select gr.Id, gr.CreationDate, gr.FromEntryNo, gr.ToEntryNo, 
        gr.FromEntryNo as [EntryNo]
 from dbo.[Register] gr 
 union all
 select Id, CreationDate, FromEntryNo, 
        ToEntryNo, EntryNo + 1 
 from cte where EntryNo < ToEntryNo
)
select Id, CreationDate, FromEntryNo, ToEntryNo, EntryNo 
from cte
ORDER BY Id,EntryNo