我跟着表:
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查询执行此操作吗?
答案 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