2017-09-05 100 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