powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Как грамотно растиражировать строку
7 сообщений из 7, страница 1 из 1
Как грамотно растиражировать строку
    #40098246
YoHnA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
День добрый!

Есть вьюшка вида Код1, Код2, Код3, Значение, ДеньСтарта, ДеньОкончания
Типа 1, 1, 2, 123, 3, 3
1, 1, 2, 123, 4, 4
1, 1, 2, 123, 5, 8
1, 1, 2, 123, 9, 9
И мне нужно, чтобы это превратилось в
1, 1, 2, 123, 3, 3
1, 1, 2, 123, 4, 4
1, 1, 2, 123, 5, 5
1, 1, 2, 123, 6, 6
1, 1, 2, 123, 7, 7
1, 1, 2, 123, 8, 8
1, 1, 2, 123, 9, 9

Очень желательно без процедурок с циклами, потому что объемы могут быть большие и цикличить фиг знает сколько таких строк может быть небыстро
Какие-от оконные функции может быть применить? Помогите, пожалуйста
...
Рейтинг: 0 / 0
Как грамотно растиражировать строку
    #40098250
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да обычный рекурсивный CTE. Вряд ли разность ДеньОкончания-ДеньСтарта велика, так что глубина рекурсии будет небольшая.

Либо можно выгрести MIN(ДеньСтарта), MAX(ДеньОкончания), на их основе сгенерить список дней, и потом привязать к исходной таблице и отобрать попадающее в диапазон записи.
...
Рейтинг: 0 / 0
Как грамотно растиражировать строку
    #40098253
Фотография HandKot
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
YoHnA,
lead() + таблица чисел
...
Рейтинг: 0 / 0
Как грамотно растиражировать строку
    #40098255
Владислав Колосов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
YoHnA,

используйте таблицу чисел, например от 1 до 10 и cross join. Условие: день старта + число <= день окончания.
...
Рейтинг: 0 / 0
Как грамотно растиражировать строку
    #40098323
invm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
YoHnA,

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
select
 b.Код1, b.Код2, b.Код3, b.Значение, b.ДеньСтарта, b.ДеньОкончания
from
 Представление a cross apply
 (
  select top (a.ДеньОкончания - a.ДеньСтарта + 1)
   a.Код1, a.Код2, a.Код3, a.Значение, a.ДеньСтарта, a.ДеньСтарта
  from
   master.dbo.spt_values
 ) b (Код1, Код2, Код3, Значение, ДеньСтарта, ДеньОкончания)
...
Рейтинг: 0 / 0
Как грамотно растиражировать строку
    #40098335
invm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Поправочка
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
select
 b.Код1, b.Код2, b.Код3, b.Значение, b.ДеньСтарта, b.ДеньСтарта as ДеньОкончания
from
 Представление a cross apply
 (
  select top (a.ДеньОкончания - a.ДеньСтарта + 1)
   a.Код1, a.Код2, a.Код3, a.Значение, a.ДеньСтарта + row_mumber() over (order by 1/0) - 1
  from
   master.dbo.spt_values
 ) b (Код1, Код2, Код3, Значение, ДеньСтарта)
...
Рейтинг: 0 / 0
Как грамотно растиражировать строку
    #40098945
YoHnA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем спасибо за идеи и решения, в итоге воспользовалось советом с cross join и таблицей чисел :)
...
Рейтинг: 0 / 0
7 сообщений из 7, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Как грамотно растиражировать строку
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]