2017-09-05 129 views
-3

其实我有14个SQL Server表,其中11个可以减少到4个。将3个表合并成一个表

他们得到了相同的列名和值,我找不到合并到一个新表(我已经创建了一个SELECT INTO FROM)的解决方案。 也有可能添加一个增量计数器来标记带有ID的新添加数据的每一行吗?

谢谢你的帮助。

+0

INSERT newtable的SELECT FROM oldtable – Milney

+0

栏我才拿到你的权利?你只是想把几张表的数据放在一张表中?如果是这样,UNION ALL可能是你的朋友 –

+0

没有任何表结构我不能真正回答任何准确度,但是,使用插入,然后选择表1中的列,并使用UNION ALL从其余的选择。对于ID使用IDENTITY(1,1)。 – Leonidas199x

回答

2
INSERT INTO BigNewTable (col1, col2, col3) 
SELECT col1, col2, col3 
FROM 
(
    SELECT col1, col2, col3 FROM Table1 
    UNION ALL 
    SELECT col1, col2, col3 FROM Table2 
    UNION ALL 
    SELECT col1, col2, col3 FROM Table3 
) 

添加一个递增计数器

使列的IDENTITY column

CREATE TABLE BigNewTable 
( 
Id int IDENTITY(1,1), 
Col1 varchar (20), 
Col2 varchar (20), 
Col3 varchar (20) 
); 
+0

不工作没有子选择? –

+0

@EstebanP .:应该也没有子选择。我更喜欢这个,如果我想添加额外的功能,例如删除重复 –

2

如果你只是想从几个源表中的数据插入到一个目的地表,你只需加入SELECTUNION ALL即可在一个声明中完成。

如果您在新的目的地表格中添加一个IDENTITY(1,1)的列,这会自动插入ID并且是您想要的计数器。

列应该像定义:ID int IDENTITY(1,1)

INSERT INTO mynewtable (col1, col2) 
    SELECT col1, col2 
     FROM oldtable1 
    UNION ALL 
    SELECT col1, col2 
     FROM oldtable2 
    UNION ALL 
    SELECT col1, col2 
     FROM oldtable4 
    UNION ALL 
    SELECT col1, col2 
     FROM oldtable4