Reputation: 13
I've following table:
Id CreationDate FromEntryNo ToEntryNo 1 2013-01-01 1 4 2 2013-01-03 5 8 3 2013-01-05 9 11 ...
I want to split this into multiple rows to have a list with all consecutive EntryNo, something like this:
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 ...
My first attempt is CTE with recursion, but it doesn't work:
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<
Any idea how to do this using one SQL query?
Upvotes: 0
Views: 119
Reputation: 10853
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
Upvotes: 1