2017-10-10 50 views
0

我想從我的數據庫導出特定數據並將其導入到另一個數據庫表。大多數情況下,所有的數據都在一張表中,但其他表中還有其他數據。大多數其他表格只有一個所需數據的記錄,但有些表格有多個必需的記錄。 例如:導出和導入選定的行

Case 
------------------ 
ID name status Sum 
1 first 2  854 
2 second 4  NULL 
3 third 6  951 
4 fourth 2  1430 

Payments 
---------------------------- 
CaseID Person payment 
1  Peter 35 
1  Robert 48 
3  Oscar 630 
4  Rob  85 
3  Oscar 130 

Documents 
----------------------------- 
CaseId DocTypeId RegNr 
1  3   14335 
1  4   43456 
1  1   34533 
2  5   23454 
2  3   35532 

我需要出口不具備狀態的所有案件「6」,我需要他們的付款和文件,可能不止一個。我可以連接表,但那些具有多個所需記錄的表將創建具有相同列數據的附加行。

With join I could get something like this 
ID name status Sum CaseId Person payment CaseId DocTypeId RegNr 
1 first 2  854 1  Peter 35  1  3   14335 
1 first 2  854 1  Robert 48  1  4   43456 
1 first 2  854 1  Peter 35  1  1   34533 

在這裏你可以看到像這樣我會得到重複的數據。我怎樣才能得到沒有重複的數據?例如,一行中的所有數據?

我不想在數據庫中導入重複數據,因爲那樣會很糟糕。 我該如何做到這一點?

我試着看看一些sql server possibilites,但找不到我需要的,所以我想我需要創建自己的腳本。

+2

你可以發佈你正在使用的查詢,也是你想要的結果嗎?目前還不清楚你說的「some」和「most」。 –

+0

案例ID 1是爲彼得和羅伯特定義的 - 所以這是正確的 - 如果您加入案例ID - 您會收到兩行......請發佈您使用的加入查詢。 – Tyron78

+0

我還沒有創建整個查詢,只是想我如何能夠完成我的需求,因爲我現在無法看到如何做到這一點。 但是,對於創建重複項的案例ID 1,導入後會導致數據損壞。 – Rudolfs

回答

0

我假設你在你的連接表輸出中得到了想要的結果,除了它給你重複。您可以輕鬆忽略重複項,並在輸出表中只插入一行。

創建一個視圖,它會給你重複的排名。

CREATE view View1 as(select *,ROW_NUMBER() OVER(partition by names, status, some, person, payment Order by id) as rn from Your_join_table) 

後只需輸入等級1列到你的輸出表

select * into output_table from View1 where rn = 1 

希望它能幫助!

+0

我有點困惑,因爲我沒有使用視圖(對數據庫來說很新穎)。我怎麼能通過這個導入所有需要的數據?我不需要手動執行所有行嗎?我可以導入所有數據而不會丟失任何東西嗎? – Rudolfs

+0

視圖是虛擬表,所以基本上你正在創建一個臨時表來獲得你需要的所有行。一旦你有了它,只需得到你需要的獨特的行。你發佈的連接表是否有你需要的所有數據?如果是的話,請按照我的指示。你非常接近! – sbiswas

+0

這是我需要的簡化版本,我必須從更多表中獲取數據。我將嘗試創建整個查詢,並查看是否可以從連接表中的所有表中獲取所有必需的列。謝謝你,我會努力創造它。 – Rudolfs