Raj*_*ore 0 sql t-sql sql-server sql-server-2005
我想加入表并获得以下输出
表格1
TestId1
----------
one
two
three
four
five
six
seven
eight
Run Code Online (Sandbox Code Playgroud)
表2
TestId2
----------
fiftythree
fiftyfour
fiftytwo
fiftyfive
fiftyone
Run Code Online (Sandbox Code Playgroud)
我希望Table3作为我的输出,包含table1中的所有行和table2中的第一行,直到没有剩下的行,然后它们应该开始重复.
作为替代答案,它们也可以随机分配.
TestId1 TestId2
---------- ----------
one fiftythree
two fiftyfour
three fiftytwo
four fiftyfive
five fiftyone
six fiftythree
seven fiftyfour
eight fiftytwo
Run Code Online (Sandbox Code Playgroud)
试试这个:
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
Run Code Online (Sandbox Code Playgroud)
详情如下:
SELECT (ROW_NUMBER() OVER(ORDER BY name)-1) AS j,*
FROM test1
Run Code Online (Sandbox Code Playgroud)
返回:
0 | one
1 | two
2 | three
3 | four
4 | five
5 | six
6 | seven
7 | eight
Run Code Online (Sandbox Code Playgroud)
这个:
SELECT ROW_NUMBER() OVER(ORDER BY name)-1 AS j,*
FROM test2
Run Code Online (Sandbox Code Playgroud)
返回:
0 | fiftythree
1 | fiftyfour
2 | fiftytwo
3 | fiftyfive
4 | fiftyone
Run Code Online (Sandbox Code Playgroud)
您所要做的就是将最长表的第一列除以(更简楚的是 - 我不知道这个的英文名称)中的元素数量:
SELECT (ROW_NUMBER() OVER(ORDER BY name)-1)%(SELECT COUNT(*) FROM test2) AS j,*
FROM test1
Run Code Online (Sandbox Code Playgroud)
返回:
0 | one
1 | two
2 | three
3 | four
4 | five
0 | six
1 | seven
2 | eight
Run Code Online (Sandbox Code Playgroud)
您现在要做的就是在第一列上连接两个表.
此解决方案仅使用一个查询,但它假定在table1中,table2中有更多元素.如果你不喜欢这个解决方案,我只是给你很好的基础来编写商店程序.
| 归档时间: |
|
| 查看次数: |
226 次 |
| 最近记录: |