2013-05-13 68 views
2

我有一个以下任务:我有一个过程中的两个单列表,他们都有相同数量的行。我想“合并”他们,所以我得到一个结果表与2列。我有一些简单的方法呢?TSQL - 合并两个表

在最坏的情况下,我可以尝试添加主键,并使用INSERT INTO ... SELECTJOIN,但它需要我已有的代码有很大的变化,所以我决定问你们。

只是为了解释我的答案,下面是例子。我有以下表格:

tableA 
col1 
---- 
1 
2 
3 
4 

tableB 
col2 
---- 
a 
b 
c 
d 

Resulting table: 
col1 | col2 
1 | a 
2 | b 
3 | c 
4 | d 
+0

只是在下面解释我的答案。我有以下表格: – Moby04 2013-05-13 17:30:19

+0

在一般收集条款中,这是两个集合的“zip”。 (想想这就像你的夹克上的拉链,而不是一个压缩文件。)这个概念的.NET和Ruby实现甚至被称为“Zip”。 – GalacticCowboy 2013-05-13 17:49:28

回答

9

你可以这样做:

SELECT t1.col1, t2.col1 AS col2 
INTO NewTable 
FROM 
(
    SELECT col1, ROW_NUMBER() OVER(ORDER BY (SELECT 1)) AS RN 
    FROM table1 
) AS t1 
INNER JOIN 
(
    SELECT col1, ROW_NUMBER() OVER(ORDER BY (SELECT 1)) AS RN 
    FROM table2 
) AS t2 ON t1.rn = t2.rn 

这将创建一个全新的表NewTable与两列从两个表:

| COL1 | COL2 | 
--------------- 
| 1 | a | 
| 2 | b | 
| 3 | c | 
| 4 | d | 

看到它在此采取行动:

+0

不是。他们没有直接的关系(都只有一列有不同的值),但我知道第一行涉及第一行,第二行和第二行等等。我知道使用CURSOR或WHILE循环很容易,但由于效率,我无法使用它。至于加入,我需要添加主键列,我想避免... – Moby04 2013-05-13 17:28:43

+0

@ Moby04 - 好吧,对不起。看我的编辑。假设它们具有相同的行数。 – 2013-05-13 17:31:52

+0

我会在早上检查一下,但看起来很有希望。谢谢:) – Moby04 2013-05-13 17:34:38