2017-10-10 49 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