2013-12-05 5 views
0

Я следующие таблицы:Как разделить строки рекурсивно

 
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 
... 

Мои первая попытка КТР с рекурсией, но он не работает:

 
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 
<

Любая идея, как это сделать, используя один SQL-запрос?

ответ

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 
Смежные вопросы