简单的问题。假设我有一个包含两列的表,PersonID和CardID以及10行。我有另一个表包含1列,代码和10行。我只想将代码堆叠到另一个表中。请注意,哪个人获取哪个代码并不重要,他们应该只获得一个代码。
目前我发现自己在两个表中都添加了rownumbers,并且更新了TableA.ID = TableB.ID。但对于这么简单的人而言,这似乎过于复杂。
有什么建议吗?
TableA
PersonID CardID
1 1
2 2
3 3
4 4
5 5
6 6
7 7
8 8
9 9
10 10
Table B
Code
Random1
Random2
Random3
Random4
Random5
Random6
Random7
Random8
Random9
Random10
Desired Result:
PersonID CardID Code
1 1 Random1
2 2 Random2
3 3 Random3
4 4 Random4
5 5 Random5
6 6 Random6
7 7 Random7
8 8 Random8
9 9 Random9
10 10 Random10
同样,代码顺序无关紧要。每个人,一个代码。那就是它。
答案 0 :(得分:0)
您不需要为每一行添加1个额外的列,您可以将CTE与RowNum一起使用,如:
;WITH CTE_Results
AS (
SELECT ROW_NUMBER() OVER (ORDER BY Code) as ID, Code
from TableB B
)
select A.PersonId, A.CardID, CTE_Results.Code from CTE_Results
INNER JOIN TableA A ON A.PersonId= CTE_Results.ID
使用SQL小提琴是:http://sqlfiddle.com/#!18/f8f86/9
结果将如下:
PersonId CardID Code
1 1 Random1
2 2 Random10
3 3 Random2
4 4 Random3
5 5 Random4
6 6 Random5
7 7 Random6
8 8 Random7
9 9 Random8
10 10 Random9