Попробуйте это:
SELECT t1.name, t2.name FROM
(
SELECT (ROW_NUMBER() OVER(ORDER BY name)-1)%(SELECT COUNT(*) FROM test2) AS j,*
FROM test1
) t1
INNER JOIN
(
SELECT ROW_NUMBER() OVER(ORDER BY name)-1 AS j,*
FROM test2
) t2 ON t1.j = t2.j
ORDER BY t1.name
В деталях:
SELECT (ROW_NUMBER() OVER(ORDER BY name)-1) AS j,*
FROM test1
Возвращает:
0 | one
1 | two
2 | three
3 | four
4 | five
5 | six
6 | seven
7 | eight
Это:
SELECT ROW_NUMBER() OVER(ORDER BY name)-1 AS j,*
FROM test2
Возвращает:
0 | fiftythree
1 | fiftyfour
2 | fiftytwo
3 | fiftyfive
4 | fiftyone
Все, что вам нужно сделать, это разделить (% - я не знаю английского названия этого) первый столбец самой длинной таблицы на количество элементов в более коротком:
SELECT (ROW_NUMBER() OVER(ORDER BY name)-1)%(SELECT COUNT(*) FROM test2) AS j,*
FROM test1
Возвращает:
0 | one
1 | two
2 | three
3 | four
4 | five
0 | six
1 | seven
2 | eight
Все, что вам нужно сделать сейчас, это объединить обе таблицы в первом столбце.
Это решение сделано с использованием только одного запроса, но предполагается, что в таблице1 больше элементов, чем в таблице2. Если вам не нравится это решение, я просто дал вам хорошую основу для написания процедуры хранения.