只需将列堆叠到现有表

时间:2018-03-14 13:14:30

标签: sql sql-server sql-server-2008

简单的问题。假设我有一个包含两列的表,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

同样,代码顺序无关紧要。每个人,一个代码。那就是它。

1 个答案:

答案 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