murphy79
Goto Top

Abfrage und Ausgabe von Inhalten mehrere Tabellen einer DB

Hallo. Ich möchte auf einem SQL Server eine Abfrage über 3 Tabellen einer Datenbank machen.
In jeder Tabelle stehen relevante Daten drinn die ich brauche.

So also: in der ersten steht die nummer also ID des Kunden und die zugehörigen Adressdaten wie PLZ und ort usw, in der zweiten steht die nummer also Id des Kunden und die Art des Kunden und in der dritten steht die nummer und die veträge des kunden.

jetzt will ich eine excel tabelle mit all diesen daten bekommen alle daten hintereinander zugehörg zur kundennummer.

ich brauche also eine abfrage die alles das ausgibt und dann einen export in excel wie geht das??????

Content-ID: 114795

Url: https://administrator.de/contentid/114795

Ausgedruckt am: 22.11.2024 um 04:11 Uhr

Biber
Biber 27.04.2009 um 17:16:14 Uhr
Goto Top
Hallo.
Moin murphy79,
Ich möchte auf einem SQL Server
Auf einem bestimmten oder eher allgemein?
eine Abfrage über 3 Tabellen einer Datenbank machen.
Auf bestimmte oder eher allgemein?

Hast Du evtl auch einen Client, mit dem Du das tun möchtest?
Hast Du eine ODBC-Connection oder ... nein, langsamer..

Wie greifst Du im Moment von Deinem Rechner auf diesen "SQL-Server" zu?

Grüße
Biber
pulse
pulse 27.04.2009 um 17:25:44 Uhr
Goto Top
Falls es sich um einen Sql Server 2005 handelt, kannst du das SQL Management Studio Express dafür nehmen.
Da führste dein Select aus und kannst die ergebnisse als CSV speichern.

Deine Abfrage musst du über Joins realisieren.
Select * FROM Kunden INNER JOIN Adresse ON Adresse.KID = Kunden.KID INNER JOIN Vertraege ON Vertraege.KID = Kunden.KID;
KID steht für KundenID
Murphy79
Murphy79 28.04.2009 um 14:14:00 Uhr
Goto Top
Also wir nutzen einen 2000er sql server.
Ich greife auf den server mit dem sql enterprise manager zu.Dortkann ich dann die tabellen anzeigen lassen und auch abfrage machen.

verstehe das mit dem join nicht so gut.

Bitte genauer.

Ich habe die DB "m3" so heisst die.
Dann darin die tabellen TMAdressen_vetrag, TMAdressen und TMVetrag_Art
Alle diese Tabellen enthalten einen Wert= nummer.

dieser ist bei allen vorhanden.

Jetzt will ich bestimmte spalten jeder einzelnen tabelle abfragen.

es soll nachher rauskommen:

tabelle mit am anfang der kundennummer dann den dazugehörigen adressdaten und der vrtragsart. in jeder zeiel ein datensatz bestehende aus diesen infos welche ja aus allen tabellen stammen zusammengebaut.
Logan000
Logan000 28.04.2009 um 15:54:33 Uhr
Goto Top
Moin Moin

verstehe das mit dem join nicht so gut.
Das solltest Du in der Onlinhilfe des SQL Server mal nachlesen.

Bei 3 Tabellen must du halt 2 Joins schachteln.
Heist das Feld jetzt nummer oder kundennummer? Ich nehme einfach zum Bsp. nummer.

Select * From (TMAdressen_vetrag Inner Join TMAdressen on TMAdressen_vetrag.nummer = TMAdressen.nummer) Inner Join TMVetrag_Art on TMAdressen_vetrag.nummer = TMVetrag_Art.nummer

Wenn deine Abfrage das gewünschte ergebniss liefert speichert du diese als Sicht (View) ab.
Dann startest du den DTS Assi und wählst diese Sicht als Datenquelle, wählst Excel als Ziel aund auf gehts.

Gruß L.
Murphy79
Murphy79 04.05.2009 um 09:26:02 Uhr
Goto Top
Das klappt schon gut, aber wenn ich dies so mache, dann hängt der mir in der view alles hintereinander und somit auch immer wieder eine Spalte die nummer heisst.So kann ich die view aber nicht speochern da er nur eine spalte mit nummer haben will und nicht 3 spalten mit diesem namen
Biber
Biber 04.05.2009 um 10:04:13 Uhr
Goto Top
Zitat von @Murphy79:
Das klappt schon gut, aber wenn ich dies so mache, dann hängt der
mir in der view alles hintereinander und somit auch immer wieder eine
Spalte die nummer heisst.So kann ich die view aber nicht speochern da
er nur eine spalte mit nummer haben will und nicht 3 spalten mit diesem namen

Moin Murphy79,

ich weiss nicht, wie dünnhäutig und belastbar Logan000 an einem handelsüblichen Montagmorgen ist, aber vielleicht ist es besser, wenn ich versuche zu antworten...

Nimm statt alle Felder [Logan000s Skizze]
Select * 
From (TMAdressen_vetrag 
Inner Join TMAdressen on TMAdressen_vetrag.nummer = TMAdressen.nummer) 
Inner Join TMVetrag_Art on TMAdressen_vetrag.nummer = TMVetrag_Art.nummer

doch einfach nur die Felder, die Du haben willst
Select V.nummer, A.name, A.vorname, A.plz, VA.whatever 
From (TMAdressen_vetrag V
Inner Join TMAdressen A on V.nummer = A.nummer) 
Inner Join TMVetrag_Art VA on VA.nummer = A.nummer
ORDER by v.nummer

-oder-

Select V.nummer, A.name, A.vorname, A.plz, VA.whatever 
From TMAdressen_vetrag V, TMAdressen A , TMVetrag_Art VA
WHERE 
A.nummer=V.Nummer AND
VA.nummer = A.nummer
ORDER by 1

Arbeitest Du eigentlich auf einem Produktivsystem und hast Du auch Insert/Update/Delete-Rechte?
Nur interessehalber...

Grüße
Biber
Murphy79
Murphy79 04.05.2009 um 10:16:00 Uhr
Goto Top
Ne das ist ein produktivsystem.
Das mit den Spaltendie ich brauche ist ja schn ok, aber das Problem ist das ich noch nicht weiß was ich wirklich alles davon brauche.Mein Chef will einfach erstmal alle infos zusammen haben in einer excel liste.Dann soll die liste bearbeitet werden, dubletten raus usw.

Ich kann die Excel liste abe rnicht machen wenn ich da spalten habe die den gleichen namen besitzen. Gibt es nicht einen befehl bei der abfrage der besagt nimm alles also select * außer die spalte nummer???

Ich will doch nur alle infos zu jedem einzelnen kunden abrufen die ich kriegen kann.

da ja in jeder tabell edie kundennummer steht muss es doch möglich sein, eine neue tabelle zu generieren wo alles drinsteht abhängig von der kundennummer.
Ohne einfach nur alle tabellen hintereinander zu schreiben mit allen Feldern (hier jetzt jeweils auch die Kundennummer)

So lässt dich die view nicht speichern
Biber
Biber 04.05.2009 um 10:41:34 Uhr
Goto Top
Moin Murphy79,

Ne das ist ein produktivsystem.
Das hatte ich irgendwie geahnt.
Ich will doch nur alle infos zu jedem einzelnen kunden abrufen die ich kriegen kann.
Jaha.
Ich habe Dir schon zugehört/zugelesen.
Aber "alle Infos" heißt doch nicht "alle Felder".

ich habe oben geschrieben "nimm einfach nur die Felder, die Du brauchst".
Und wenn denn nun ein Feld V.Nummer und ein Feld VA.Nummer und ein Feld A.nummer in Deinem JOIN existieren würde, dann zeigt doch nur eines dieser drei an (SELECT V.Nummer, V.bla, V.blubb,...A.whatThe, V.uck")

Und ja, die Felder, die Du holst musst Du einzeln angeben bzw. eintippseln.

Tipp:
Du kannst es vereinfachen, indem Du - wenn meinetwegen "V" die feldreichste der Tabellen ist- schreibst
 SELECT V.* , A.Name, A.Vorname, A.Plz, VA.FeldX, VA.FeldY..........

... also EINE der Tabellen mit einem SELECT [Aliasname].* anziehst.
geht aber nur bei einer, da in allen drei Tabellen ja mindestens ein Feld gleichen Namens ist.

Grüße
Biber