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

Откуда:
Сообщений: 21
Есть две таблицы
T1 с полем ID1, содержащем 100 записей (1, 2, 3, 4 .. 100)
T2 с полем ID2, содержащем 7 записей (1, 2, 3, 4, 5, 6, 7)

Необходимо вывести таблицу (T3), содержащую два поля ID1 и ID2
ID2 должно повторяться, до полного заполнения таблицы T3

T3
ID1 ID2
1 1
2 2
3 3
4 4
5 5
6 6
7 7
8 1
9 2
10 3
... ...
98 7
99 1
100 2


Помогите, пожалуйста, составить запрос.
16 авг 12, 19:41    [13022878]     Ответить | Цитировать Сообщить модератору
 Re: Повтор записей одной таблицы вдоль записей другой таблицы  [new]
aleks2
Guest
select T1.id, T2.id
from T1 inner join T2 on T2.id = T1.id%7+1
16 авг 12, 19:48    [13022897]     Ответить | Цитировать Сообщить модератору
 Re: Повтор записей одной таблицы вдоль записей другой таблицы  [new]
`
Guest
;with 
cte1 as (select 1 as id1 union all select id1+1 from cte1 where id1<100),
cte2 as (select 1 as id2 union all select id2+1 from cte2 where id2<7)

select a.id1, b.id2 from
(select *, (row_number() over(order by id1)-1) % (select count(*) from cte2) + 1 as rn from cte1) a
inner join
(select *, row_number() over(order by id2) as rn from cte2) b
on a.rn=b.rn
16 авг 12, 19:58    [13022953]     Ответить | Цитировать Сообщить модератору
 Re: Повтор записей одной таблицы вдоль записей другой таблицы  [new]
trew
Member

Откуда: Москва
Сообщений: 2646
aleks2,

С ошибкой работает
declare @tab1 table (id int)
declare @tab2 table (id int)

insert into @tab1 (id)
select 1
union all
select 2
union all
select 3
union all
select 4
union all
select 5
union all
select 6
union all
select 7
union all
select 8
union all
select 9
union all
select 10
union all
select 11
union all
select 12

insert into @tab2 (id)
select 1
union all
select 2
union all
select 3

--select T1.id, T2.id
--from @tab1 T1 left join @tab2 T2 on T2.id =  T1.id%3+1

-- везде 3 заменить на 7, для своего варианта
select T1.id, CASE WHEN T1.id%3 =0 THEN 3 ELSE T1.id%3 END as dd
from @tab1 T1 left join @tab2 T2 on T2.id =  T1.id%3
16 авг 12, 20:06    [13022982]     Ответить | Цитировать Сообщить модератору
 Re: Повтор записей одной таблицы вдоль записей другой таблицы  [new]
aleks2
Guest
select T1.id, T2.id
from @tab1 T1 inner join @tab2 T2 on T2.id = (T1.id-1)%7+1


на чо жалуемся?
16 авг 12, 20:12    [13023013]     Ответить | Цитировать Сообщить модератору
 Re: Повтор записей одной таблицы вдоль записей другой таблицы  [new]
Serg_77m
Member

Откуда: Донецк
Сообщений: 237
aleks2
select T1.id, T2.id
from @tab1 T1 inner join @tab2 T2 on T2.id = (T1.id-1)%7+1


на чо жалуемся?


А может, лучше так? :)
select T1.id as ID1, (T1.id-1)%7+1 as ID2
from @tab1 T1


Подозреваю, что постановка неполная.
16 авг 12, 20:21    [13023040]     Ответить | Цитировать Сообщить модератору
 Re: Повтор записей одной таблицы вдоль записей другой таблицы  [new]
5c0rp
Member

Откуда:
Сообщений: 21
Serg_77m
Подозреваю, что постановка неполная.


Спасибо всем за отклик.
Но видать действительно не полная.
id из таблиц не как между собой не связаны, т.е. {1, 2 .. 7} из второй таблицы можно заменить на {q, w, e, r, t, y, u}, для избегания путаницы.
17 авг 12, 07:41    [13024259]     Ответить | Цитировать Сообщить модератору
 Re: Повтор записей одной таблицы вдоль записей другой таблицы  [new]
HandKot
Member

Откуда: Sergiev Posad
Сообщений: 3058
5c0rp
Serg_77m
Подозреваю, что постановка неполная.


Спасибо всем за отклик.
Но видать действительно не полная.
id из таблиц не как между собой не связаны, т.е. {1, 2 .. 7} из второй таблицы можно заменить на {q, w, e, r, t, y, u}, для избегания путаницы.

ну так сначала навесить ROW_NUMBER, а потом уже и скрипт от aleks2
и еще можно заложится на кол-во записей во второй таблице, там ведь тоже не всегда может быть 7 записей
17 авг 12, 07:59    [13024282]     Ответить | Цитировать Сообщить модератору
 Re: Повтор записей одной таблицы вдоль записей другой таблицы  [new]
Гузы
Guest
5c0rp,
Нихруна не понял в чем проблема.
М.б. жить проще?
select id1,id2 
from t1
cross join t2 
17 авг 12, 09:40    [13024560]     Ответить | Цитировать Сообщить модератору
 Re: Повтор записей одной таблицы вдоль записей другой таблицы  [new]
iap
Member

Откуда: Москва
Сообщений: 47142
Гузы
5c0rp,
Нихруна не понял в чем проблема.
М.б. жить проще?
select id1,id2 
from t1
cross join t2 
Получится 700 записей?
А надо 100
17 авг 12, 10:00    [13024646]     Ответить | Цитировать Сообщить модератору
 Re: Повтор записей одной таблицы вдоль записей другой таблицы  [new]
Гузы
Guest
iap
]Получится 700 записей?
А надо 100

off: А, сказали йоги, с парашютом...(с).
Дошло, как до жирафа. В отпуске отдохнул хорошо.
17 авг 12, 10:45    [13024929]     Ответить | Цитировать Сообщить модератору
 Re: Повтор записей одной таблицы вдоль записей другой таблицы  [new]
5c0rp
Member

Откуда:
Сообщений: 21
`
;with 
cte1 as (select 1 as id1 union all select id1+1 from cte1 where id1<100),
cte2 as (select 1 as id2 union all select id2+1 from cte2 where id2<7)

select a.id1, b.id2 from
(select *, (row_number() over(order by id1)-1) % (select count(*) from cte2) + 1 as rn from cte1) a
inner join
(select *, row_number() over(order by id2) as rn from cte2) b
on a.rn=b.rn


Заработало!

Всем большое спасибо.
17 авг 12, 11:42    [13025358]     Ответить | Цитировать Сообщить модератору
 Re: Повтор записей одной таблицы вдоль записей другой таблицы  [new]
dmitryk100
Member

Откуда:
Сообщений: 21
5c0rp
`
;with 
cte1 as (select 1 as id1 union all select id1+1 from cte1 where id1<100),
cte2 as (select 1 as id2 union all select id2+1 from cte2 where id2<7)

select a.id1, b.id2 from
(select *, (row_number() over(order by id1)-1) % (select count(*) from cte2) + 1 as rn from cte1) a
inner join
(select *, row_number() over(order by id2) as rn from cte2) b
on a.rn=b.rn


Заработало!

Всем большое спасибо.


что такое говнокод, и как с ним бороться?
17 авг 12, 12:35    [13025846]     Ответить | Цитировать Сообщить модератору
 Re: Повтор записей одной таблицы вдоль записей другой таблицы  [new]
sti
Member

Откуда:
Сообщений: 769
select T1.id1, 8-T2.id2 as id2
from T1 join T2 ON (T1.id1 + T2.id2 - 1)%7 = 0
ORDER BY T1.id1, T2.id2
17 авг 12, 15:56    [13027654]     Ответить | Цитировать Сообщить модератору
 Re: Повтор записей одной таблицы вдоль записей другой таблицы  [new]
`
Guest
dmitryk100
5c0rp
пропущено...


Заработало!

Всем большое спасибо.


что такое говнокод, и как с ним бороться?

dmitryk100,

вопросы ?
17 авг 12, 16:52    [13028031]     Ответить | Цитировать Сообщить модератору
 Re: Повтор записей одной таблицы вдоль записей другой таблицы  [new]
SHok_by
Member

Откуда: Minsk
Сообщений: 51
SELECT r1.ID1,r2.ID2 FROM
(SELECT ID1, ROW_NUMBER() OVER(ORDER BY ID1) AS rn1 FROM T1) AS r1
INNER JOIN
(SELECT ID2, ROW_NUMBER() OVER(ORDER BY ID2) AS rn2 FROM T2) AS r2
ON (r1.rn1-1)%(SELECT COUNT(*) FROM T2)+1 = r2.rn2
ORDER BY r1.ID1,r2.ID2

может так?
17 авг 12, 16:54    [13028045]     Ответить | Цитировать Сообщить модератору
 Re: Повтор записей одной таблицы вдоль записей другой таблицы  [new]
SHok_by
Member

Откуда: Minsk
Сообщений: 51
SHok_by
SELECT r1.ID1,r2.ID2 FROM
(SELECT ID1, ROW_NUMBER() OVER(ORDER BY ID1) AS rn1 FROM T1) AS r1
INNER JOIN
(SELECT ID2, ROW_NUMBER() OVER(ORDER BY ID2) AS rn2 FROM T2) AS r2
ON (r1.rn1-1)%(SELECT COUNT(*) FROM T2)+1 = r2.rn2
ORDER BY r1.rn1,r2.rn2

точнее так?
17 авг 12, 16:56    [13028064]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить