Hallo, ich hoffe mir kann jemand helfen. Ich stehe auf dem Schlauch. Ich habe ein Access DB und möchte eine große Tabellen aus den Daten machen. Die untenstehenden Tabellesituation ist vereinfacht dargestellt, sollte aber das Problem treffen, Kunde & Adresse stehen in 1:n genauso Kunde & Telekommunikation (1:n) Kunden: kunden_id name vorname titel .... Adressen: kunden_id adress_id strasse plz ... Telekommunikation: kunden_id kommunikations_id kommunikationskennung (Emailadresse, Telnr., Faxnr.) kommunkikations_typ (gibt an, ob Email,Telefon,Fax) ... Wie kann ich daraus eine Tabelle machen, die so aussieht? Mastertabelle: kunden_id strasse1 plz1 ... strasse2 plz2 ... kommunikationskennung (Emailadresse, Telnr., Faxnr.) kommunkikations_typ (gibt an, ob Email,Telefon,Fax) ... kommunikationskennung2 kommunkikations_typ2 ... Wieviele Adressen oder Kommunikationseinträge hatte ist natürlich nicht fix. Ich möchte die Adressen und die Kommmunikaionseinträge auf sagen wir 6 beschränken und möchte, dass bei einem fehlenden Adresse ein NULL eingetragen wird. Wie kann ich das hinbekommen? Mit Accessabfragen oder direktem SQL ist egal. Kann auch unschön aussehen und ineffizient sein. soll halt nur mal gehen, um Daten einmalig zu exportieren. Kann mir jemand zumindest einen Anstoss geben? Vielen Dank philo nicht zwingend, wäre aber schön, wenn sogar zB "kommunkikations_typ" aus der ensprechenden Schlüssentabelle eingetragen würde: kommunkikations_typ_KEYS: 1 Email 2 Fax 3 Tel
Hmm, ehrlich gesagt glaube ich nicht, das sich das Problem mit einer Abfrage lösen lässt. Da müsste man wohl eher ein VB-Script basteln, was die Daten durcharbeitet und z.B. in eine Excel-Tabelle schreibt... Das wäre jetzt zumindest mein Lösungsansatz...
Das geht mit subselects, allerdings werden die ab einer gewissen menge recht unperformant. SELECT kunde, (SELECT strasse from adressen where adressen.kunde = kunden.kunde LIMIT 1), (SELECT plz from adressen where adressen.kunde = kunden.kunde LIMIT 1), ..., (SELECT strasse from adressen where adressen.kunde = kunden.kunde LIMIT 1,1), (SELECT plz from adressen where adressen.kunde = kunden.kunde LIMIT 1,1), ..., .... from kunden; Ich würde aber dringend empfehlen das mit einem Skript oder Stored Procedure zu lösen.
Ah, interessant! so tief bin ich da noch nicht eingestiegen... Für die Umsetzung in VBA hilft Dir vielleicht das hier weiter: Tabelle aus VBA in Excel schreiben
Hab das jetzt versucht. Das LIMITerzeugt einen Syntax Fehler und ohne bekomme ich den Fehler: Höchstens ein Datensatz kann von dieser Unterabfrage zurückgegeben werden. (Fehler 3354) Kann es sein, dass ich mit dem Befehl oben nur einen DS bekommen kann? Ich wollte gern alle haben, da es zum Export ist (ich gebe zu, dass das versteckt im Betreff stand) Noch eine Idee? Gruss philo
Also mein Beispiel war aus MySQL erfahrung gewonnen, welche Datenbank ist das denn? Sonst mal in der Dokumentation schauen wie man Abfragen begrenzt (bei Mysql geht das mit LIMIT)
kein Limit in Access Auch wenn es schon eine weile her ist... Ich stand die Tage vor einem ähnlichen Problem, bei mir ist aber eine Oracle DB die Grundlage. Für Access gilt leider Bei Oracle kann man statt LIMIT (gibt es da auch nicht) auf rownum zurückgreifen: Ob es bei Access auch so eine Hintertüre gibt habe ich aber noch nicht raus gefunden.