Я думаю, що календарний стіл тут не зовсім правильний. Оскільки ви хочете, щоб послідовні дати дати таблицю, здається, хороший спосіб піти.
Спочатку налаштуємо дані.
declare @Something table
(
NAME varchar(10)
, ID varchar(10)
, DateFrom date
, THRU date
)
insert @Something values
('Bob', 'A123', '20101030', '20101102')
, ('Bob', 'B567', '20101030', '20101102')
Далі нам потрібна наша таблиця. Я тримаю один як перегляд на моїй системі, і це швидко бурхливе з нульовим читанням. Ви можете регулювати кількість рядків відповідно до ваших потреб.
create View [dbo].[cteTally] as
WITH
E1(N) AS (select 1 from (values (1),(1),(1),(1),(1),(1),(1),(1),(1),(1))dt(n)),
E2(N) AS (SELECT 1 FROM E1 a, E1 b), --10E+2 or 100 rows
E4(N) AS (SELECT 1 FROM E2 a, E2 b), --10E+4 or 10,000 rows max
cteTally(N) AS
(
SELECT ROW_NUMBER() OVER (ORDER BY (SELECT NULL)) FROM E4
)
select N from cteTally
Тепер запит на вашу ситуацію досить простий.
select s.Name
, s.ID
, s.DateFrom
, s.THRU
, DOS = DATEADD(day, t.N - 1, DateFrom)
from @Something s
join cteTally t on t.N <= datediff(day, DateFrom, THRU) + 1
order by s.Name
, s.ID
, t.N