Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Как продублировать строки на указанное количество?  [new]
Egorko
Member

Откуда:
Сообщений: 22
Доброго времени суток всем.Пожалуйста подскажите.... Столкнулся со следующей задачей. Имеем:
1 Vasya 2
2 Petya 3

Нужно получить:
1 Vasya 2
1 Vasya 2
2 Petya 3
2 Petya 3
2 Petya 3


Т.е. необходимо продублировать строки столько раз,сколько указано в третьем столбце.
Долго сражался,но увы... В Оракле есть конструкция CONNECT BY LEVEL насколько я знаю. А вот недавно стал изучать SQL SERVER, но увы пока ничего не нашёл.
21 сен 13, 14:53    [14867245]     Ответить | Цитировать Сообщить модератору
 Re: Как продублировать строки на указанное количество?  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31868
Egorko
Т.е. необходимо продублировать строки столько раз,сколько указано в третьем столбце.
Долго сражался,но увы...
Сделать джойн с таблицой, содержищей цифры.
Egorko
В Оракле есть конструкция CONNECT BY LEVEL насколько я знаю. А вот недавно стал изучать SQL SERVER, но увы пока ничего не нашёл.
В SQL SERVER есть аналогичная конструкция CTE. Но это, как и CONNECT BY LEVEL, тупой способ - операцию соединения заменять на цикл по строкам.
21 сен 13, 15:19    [14867271]     Ответить | Цитировать Сообщить модератору
 Re: Как продублировать строки на указанное количество?  [new]
KRS544
Member

Откуда:
Сообщений: 497
select 1 as q
into #t
union select 2
union select 3
union select 4
union select 5
union select 6
union select 7

select 2 as k,'qwerty' as v
into #s
union select 3,'asdfg'
union select 4,'btbtrwbr'

--select * from #t
--select * from #s

select *
from #s  join #t on #s.k>=#t.q

drop table #t
drop table #s

поля на свои поменяете...
21 сен 13, 20:04    [14867750]     Ответить | Цитировать Сообщить модератору
 Re: Как продублировать строки на указанное количество?  [new]
Cygapb-007
Member

Откуда:
Сообщений: 1677
select t.*
from(values(1,'Вася',2),(2,'Петя',3))t(id,name,qty)
join(values(1),(2),(3))n(n) on n.n<=t.qty
21 сен 13, 20:15    [14867771]     Ответить | Цитировать Сообщить модератору
 Re: Как продублировать строки на указанное количество?  [new]
Критик
Member

Откуда: Москва / Калуга
Сообщений: 35080
Блог
select t1.*
  -- ваша таблица
  from [master].[dbo].[spt_monitor] as t1
  -- таблица "размножения", число - насколько размножить
  cross join (select top 10 * from [master].[dbo].[spt_values]) as t2
22 сен 13, 00:43    [14868321]     Ответить | Цитировать Сообщить модератору
 Re: Как продублировать строки на указанное количество?  [new]
mike909
Member

Откуда:
Сообщений: 662
Egorko
Т.е. необходимо продублировать строки столько раз,сколько указано в третьем столбце.

Давным давно такое уже решалось Помогите, натолкните на мысль с запросом
22 сен 13, 08:17    [14868651]     Ответить | Цитировать Сообщить модератору
 Re: Как продублировать строки на указанное количество?  [new]
Egorko
Member

Откуда:
Сообщений: 22
Спасибо,ребята! Толкнули в нужную сторону!)) Создал временную таблицу с числами
22 сен 13, 20:53    [14869803]     Ответить | Цитировать Сообщить модератору
 Re: Как продублировать строки на указанное количество?  [new]
zxc1257
Member

Откуда:
Сообщений: 71
Egorko
Спасибо,ребята! Толкнули в нужную сторону!)) Создал временную таблицу с числами


в копилку
with
l0(n) as (select 1 union all select 1),
l1(n) as (select 1 from l0 t1, l0 t2),
l2(n) as (select 1 from l1 t1, l1 t2),
l3(n) as (select 1 from l2 t1, l2 t2),
rt(n) as (select row_number() over(order by (select 0)) from l3)
select top(5) n
from rt;
22 сен 13, 21:53    [14869911]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить