如何使用SQL Server中的select语句合并两个表中的数据

时间:2013-11-20 15:28:30

标签: sql-server sql-server-2008

我有两张类似列的表。

表A

Col1 Col2
1    ABC
2    BCD
3    CDE

表B

Col3 Col4
1    EFG
2    FGH
3    GHI

我想使用select查询将两个表合并到一个表中,输出应如下所示:

ID Col1 Col2
1  1    ABC
2  2    BCD
3  3    CDE
4  1    EFG
5  2    FGH
6  3    GHI

OR

Col1 Col2
1     ABC
2     BCD
3     CDE
4     EFG
5     FGH
6     GHI

任何人都可以向我提供上述输出的查询:

注意:我希望将唯一ID作为col1来代替重复的ID。

提前致谢

4 个答案:

答案 0 :(得分:2)

SELECT Col1,
       Col2
FROM   TableA
UNION
SELECT Col3 AS Col1,
       Col4 AS Col2
FROM   TableB;

修改

如果您需要新的自动增量ID列,则必须使用ROW_NUMBER()

添加它
--  Create test table
CREATE TABLE Table1
(
Col1 int
,Col2 CHAR(4)
);

-- Insert data
INSERT INTO Table1(Col1, Col2)
SELECT '1', 'ABC' UNION ALL
SELECT '2', 'BCD' UNION ALL
SELECT '3', 'CDE';

CREATE TABLE Table2
(
Col3 int
,Col4 CHAR(4)
);

-- Insert data
INSERT INTO Table2(Col3, Col4)
SELECT '1', 'EFG' UNION ALL
SELECT '2', 'FGR' UNION ALL
SELECT '3', 'GHI';

 SELECT *, ROW_NUMBER() OVER(ORDER BY Col2) ROW_NUM
  FROM (
        select Col1, Col2 from Table1
        union all  
        select Col3, Col4 from Table2
       ) a
       ORDER BY ROW_NUM

-- Drop table
DROP TABLE Table1
DROP TABLE Table2

答案 1 :(得分:0)

您可以使用UNION。请参阅链接:

http://technet.microsoft.com/en-us/library/ms180026.aspx

答案 2 :(得分:0)

这就是你需要的。使用row_number()

SELECT *, ROW_NUMBER() OVER(ORDER BY col2) ROW_NUM
 FROM (
    select col1, col2 from Table1  
    Union all  
    select col3 as col1, col4 as col2 from Table2
   ) a
order by a.col1,a.col2

Sql Fiddle

答案 3 :(得分:0)

您可以使用UNION命令:

试试这个:

SELECT Col1 as Col1, Col2 as Col2 FROM TableA
UNION 
SELECT Col3, Col4 FROM TableB

OR

SELECT Col1 as Col1, Col2 as Col2 FROM TableA
UNION ALL
SELECT Col3, Col4 FROM TableB

如果要丢弃所有重复的行,则必须使用第一个查询。

如果要显示重复的行,则必须使用第二个查询。

如果您确定不存在重复行,请始终使用UNION ALL,因为不应用静默DISTINCT子句。

修改

我已经用这种方式更新了我的答案:

我已经使用DENSE_RANK()函数根据假字段(总值0)重新编号您的ID字段

SELECT DENSE_RANK() OVER 
    (PARTITION BY fake ORDER BY col1, col2 DESC) AS id,
T.col1, T.col2
FROM 
    (SELECT Col1 as col1, Col2 as col2, 0 as fake
    FROM TableA 
    UNION ALL
    SELECT col3, col4, 0
    FROM TableB) as T

转到sqlfiddle http://sqlfiddle.com/#!6/221af/8/0