Pleshey
Newbie | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору snike555 Запрос, я полагаю, можно сделать, только вот на а надо ограничения наложить 1 первый день 2 количество дней(включая первый и последний дни диапазона), или последний день. 3 максимально допустимое количество дней в диапазоне 1-2 Параметры 1 и 2, я так полагаю изменяемые и будут подставлятся в строку запроса. Остальное может сделать сервер. В принципе, можно обойтись без 3 - зависит от того в какой среде будет генерится запрос, ну и других соображений. Как вариант решения select case when ID is null then a else null end as a, case when ID is null then null else a end as b, ID from ( select num, Добавить_к_дате(StartDate , num -1, дней) <<-- формируешь последовательно даты>> as a from( select num from Numerator where num <= days) snum left join ( select b, ID from bID union all select distinct b, Null as ID from bID ) t on snum.a=t.b ) t order by num, b здесь Numerator - таблица с последовательностью чисел, начиная с 1, перекрывающих необходимый тебе диапазон. days - количество дней в выбранном диапазоне. StartDate - первый день диапазона - здесь также нужна функция типа Добавить_к_дате(StartDate , num -1, дней), которая будет прибавлять в первому дню диапазона номера из таблицы, таким образом создашь непрерывный диапазон дней в заданном диапазоне. oraclе не юзаю, сам подберешь нужную. Проверить запрос возможности не было, надеюсь грубых ошибок нет, мелкие сам поправишь. Numerator можно сгенерить на лету - ну не знаю, учитывая, что тут рекомендуется сортировка по полю этой таблицы, может стоит ее создать с соответствующим индексом. да и для других запросов может пригодиться Оптимизацией не занимался - написал так, что бы запрос легко читался. | Всего записей: 1 | Зарегистр. 27-03-2010 | Отправлено: 18:50 27-03-2010 | Исправлено: Pleshey, 23:48 27-03-2010 |
|