我有两张类似列的表。
表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。
提前致谢
答案 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。请参阅链接:
答案 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
答案 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