У меня есть таблица, содержащая следующие данные
periodID periostart periodend
1 01-01-2012 10-01-2012
2 11-01-2012 01-04-2012
Я бы хотел, чтобы запрос возвратил что-то подобное.periodID date
1 01-01-2012
1 02-01-2012
1 03-01-2012
etc.
1 09-01-2012
2 11-01-2012
2 12-01-2012
etc.
2 31-03-2012
Поскольку у меня около 100 000 строк, содержащих точки, я хотел бы поработать над решением, которое не повлияет на производительность (курсоры, циклы).Возможно ли получить желаемый результат без использования курсоров или циклов?
Спасибо за участие.
Я уже получил это решение
create table #p (id int, periodstart smalldatetime, periodend smalldatetime );
insert into #p values
(1, '2012-01-01', '2015-01-10')
insert into #p values
(2, '2012-04-10', '2015-11-20');
SELECT TOP 366 --aprox one year
IDENTITY(INT,0,1) AS N
INTO #Tally
FROM Master.dbo.SysColumns sc1,
Master.dbo.SysColumns sc2
SELECT DATEADD(day, T.N, periodstart) AS [Date]
FROM #p
cross join #tally T
WHERE (T.N >= 0 AND T.N < DATEDIFF(day, periodstart, periodend))
ORDER BY [Date]