2017-10-10 24 views
0

Ich möchte bestimmte Daten aus meiner Datenbank exportieren und in andere Datenbanktabellen importieren. Meistens sind alle Daten in einer Tabelle, aber es gibt einige zusätzliche Daten in anderen Tabellen. Die meisten anderen Tabellen enthalten nur einen Datensatz der erforderlichen Daten, aber einige Tabellen enthalten mehrere erforderliche Datensätze. Zum Beispiel:Ausgewählte Zeilen exportieren und importieren

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 

Ich brauche alle Fälle zu exportieren, die nicht Status ‚6‘ und ich brauche ihre Zahlungen und Dokumente, die mehr als eine sein kann. Ich könnte Tabellen beitreten, aber diese Tabellen mit mehreren erforderlichen Datensätzen würden zusätzliche Zeilen mit den gleichen Spaltendaten erstellen.

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 

Hier können Sie sehen, dass ich so doppelte Daten erhalten würde. Wie kann ich die Daten ohne Duplikate erhalten? Zum Beispiel alle Daten in einer Zeile?

Ich möchte nicht doppelte Daten in einer Datenbank importieren, da das wirklich schlecht wäre. Wie kann ich das erreichen?

Ich habe versucht, einige SQL-Server-Möglichkeiten zu sehen, konnte aber nicht finden, was ich brauche, also nehme ich an, dass ich mein eigenes Skript erstellen muss.

+2

Können Sie die Abfrage, die Sie verwenden, und auch die gewünschten Ergebnisse posten? Es ist nicht klar, was Sie sagen mit den Worten "einige" und "am meisten". –

+0

Case ID 1 ist für Peter und Robert definiert - also ist es richtig, dass - wenn Sie über Case-ID beitreten - Sie zwei Zeilen erhalten ... posten Sie bitte die Join-Abfrage, die Sie verwendet haben. – Tyron78

+0

Ich habe noch nicht die ganze Frage erstellt, denke nur, wie ich meine Bedürfnisse erfüllen kann, da ich jetzt nicht sehen kann, wie ich das machen soll. Aber für Fall ID 1, die Duplikate erstellt, die Daten nach dem Import ruinieren. – Rudolfs

Antwort

0

Ich nehme an, Sie erhalten das gewünschte Ergebnis in Ihrer Join-Tabelle Ausgabe, außer es gibt Duplikate. Sie können die Duplikate einfach ignorieren und nur eine Zeile in Ihre Ausgabetabelle einfügen.

Erstellen Sie eine Ansicht, die Ihnen die Rangfolge der Duplikate anzeigt.

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

danach einfach den Rang 1 Zeilen zu Ihrer Ausgabetabelle eingeben

select * into output_table from View1 where rn = 1 

Hoffe, es hilft!

+0

Ich bin ein wenig verwirrt, da ich keine Ansichten verwendet habe (ziemlich neu in Datenbanken). Wie kann ich alle erforderlichen Daten importieren? Müsste ich nicht alle Zeilen manuell machen? Kann ich alle Daten importieren, ohne etwas zu verlieren? – Rudolfs

+0

Ansichten sind die virtuelle Tabelle, also erstellen Sie im Grunde eine temporäre Tabelle, um alle benötigten Zeilen zu erhalten. Sobald Sie es haben, erhalten Sie einfach die einzigartigen Zeilen, die Sie benötigen. Die Join-Tabelle, die Sie gepostet haben, enthält sie alle Daten, die Sie benötigen? Wenn ja, dann folge meinen Anweisungen. Du bist sehr nah dran! – sbiswas

+0

Dies ist eine vereinfachte Version von dem, was ich brauche, ich muss Daten von mehr Tabellen erhalten. Ich werde versuchen, die gesamte Abfrage zu erstellen und zu sehen, ob ich alle erforderlichen Spalten aus allen Tabellen in meiner Join-Tabelle abrufen kann. Vielen Dank dafür, ich werde versuchen, es zu schaffen. – Rudolfs

Verwandte Themen