PDA

Vollständige Version anzeigen : Abfrage aus mehreren Tabellen für Rechnung


oskarchen
27.04.2011, 14:28
Hallo,

ich bräuchte eine Abfrage aus mehreren Tabellen zum erstellen eines Berichts(Rechnung).
Ich habe folgende Tabellen: Rechnungskopf,RechnungszeileArt,Rechnungszeile Kurse, RechnungszeileWoh, Kunden, Artikel, Wohnungen.

Die Abfrage soll mir aus allen Tabellen die zur Rechnungsnummer passenden Daten liefern. Das funktioniert solange ich nur aus einer Tabelle Daten abfrage.

Sobald ich allerdings die Daten aus der 2. bzw. 3. Tabelle abfrage, bekomme ich doppelte Einträge und weiß nicht warum?!

Die funktioniert so wie ich es mir vorstelle:

SELECT Rechnungskopf.Rechnungsnummer, Rechnungskopf.KdNummer, Rechnungskopf.Datum, tblKunden1.anrede, [vorname] & " " & [Name] AS vornachname, tblKunden1.name, tblKunden1.straße, [plz] & " " & [ort] AS plzort, tblKunden1.ort, RechnungszeileArt.Artikelnummer, RechnungszeileArt.Stückzahl, tblArtikel1.[Artikel-Name], tblArtikel1.Beschreibung, tblArtikel1.ArtikelPreis
FROM Kurse INNER JOIN ((tblKunden1 INNER JOIN (tblArtikel1 INNER JOIN (Rechnungskopf INNER JOIN RechnungszeileArt ON Rechnungskopf.Rechnungsnummer = RechnungszeileArt.Rechnungsnummer) ON tblArtikel1.Artikelnummer = RechnungszeileArt.Artikelnummer) ON tblKunden1.Kundennummer = Rechnungskopf.KdNummer) INNER JOIN RechnungszeileKurs ON Rechnungskopf.Rechnungsnummer = RechnungszeileKurs.Rechnungsnummer) ON Kurse.Kursnummer = RechnungszeileKurs.Kursnummer
GROUP BY Rechnungskopf.Rechnungsnummer, Rechnungskopf.KdNummer, Rechnungskopf.Datum, tblKunden1.anrede, [vorname] & " " & [Name], tblKunden1.name, tblKunden1.straße, [plz] & " " & [ort], tblKunden1.ort, RechnungszeileArt.Artikelnummer, RechnungszeileArt.Stückzahl, tblArtikel1.[Artikel-Name], tblArtikel1.Beschreibung, tblArtikel1.ArtikelPreis
HAVING (((Rechnungskopf.Rechnungsnummer)=[geben sie die rechnungsnummer ein]));

Sobald ich aber die Daten zur passenden Rechnungsnummer aus der 2. Tabelle abfrage bekomme ich doppelte Einträge:

SELECT Rechnungskopf.Rechnungsnummer, Rechnungskopf.KdNummer, Rechnungskopf.Datum, tblKunden1.anrede, [vorname] & " " & [Name] AS vornachname, tblKunden1.name, tblKunden1.straße, [plz] & " " & [ort] AS plzort, tblKunden1.ort, RechnungszeileArt.Artikelnummer, RechnungszeileArt.Stückzahl, tblArtikel1.[Artikel-Name], tblArtikel1.Beschreibung, tblArtikel1.ArtikelPreis, RechnungszeileKurs.Kursnummer, RechnungszeileKurs.Anzahl, RechnungszeileKurs.Von, RechnungszeileKurs.Von, Kurse.Kurs, Kurse.KursPreis
FROM Kurse INNER JOIN ((tblKunden1 INNER JOIN (tblArtikel1 INNER JOIN (Rechnungskopf INNER JOIN RechnungszeileArt ON Rechnungskopf.Rechnungsnummer = RechnungszeileArt.Rechnungsnummer) ON tblArtikel1.Artikelnummer = RechnungszeileArt.Artikelnummer) ON tblKunden1.Kundennummer = Rechnungskopf.KdNummer) INNER JOIN RechnungszeileKurs ON Rechnungskopf.Rechnungsnummer = RechnungszeileKurs.Rechnungsnummer) ON Kurse.Kursnummer = RechnungszeileKurs.Kursnummer
GROUP BY Rechnungskopf.Rechnungsnummer, Rechnungskopf.KdNummer, Rechnungskopf.Datum, tblKunden1.anrede, [vorname] & " " & [Name], tblKunden1.name, tblKunden1.straße, [plz] & " " & [ort], tblKunden1.ort, RechnungszeileArt.Artikelnummer, RechnungszeileArt.Stückzahl, tblArtikel1.[Artikel-Name], tblArtikel1.Beschreibung, tblArtikel1.ArtikelPreis, RechnungszeileKurs.Kursnummer, RechnungszeileKurs.Anzahl, RechnungszeileKurs.Von, RechnungszeileKurs.Von, Kurse.Kurs, Kurse.KursPreis
HAVING (((Rechnungskopf.Rechnungsnummer)=[geben sie die rechnungsnummer ein]));

Ich hoffe es kann mir jemand helfen.

Viele Grüße,

Oskar

Atrus2711
27.04.2011, 14:43
Hi,

Rechnungskopf,RechnungszeileArt,Rechnungszeile Kurse, RechnungszeileWoh, Kunden, Artikel, Wohnungen
ich ahne nur, wie diese Tabelle zusammenhängen könnten. Sag es mir!

Duplikate in der fraglichen Anfrage erhältst du, weil du dort nach mehr Feldern gruppierst als in der ersten. Jede vorkommende Kombination aus den Gruppenfeldern bildet eine Zeile.

oskarchen
28.04.2011, 11:41
Hallo und danke für die rasche Antwort :)

Die Tabellen hängen wie folgt zusammen:

Ich habe folgende Tabellen: Kunden, Artikel, Kurse, Ferienwohnungen, Rechnungskopf, RechnungszeileArtikel, Rechnungszeile Wohnungen, Rechnungszeile Kurse

In der Tabelle Rechnungskopf werden Rechnungsnummer(Schlüssel),Kundennummer(Schlüssel in Tab Kunden 1:n) und Datum gespeichert.
In der Tabelle RechnungszeileArt werden ID, Rechnungsnummer (Schlüssel in Tab Rechnungskopf 1:n) Artikelnummer (Schlüssel in Tab Artikel 1:n) und Stückzahl gespeichert.
In der Tabelle RechnungszeileWohn werden ID, Rechnungsnummer(Schlüssel in Tab Rechnungskopf 1:n), Von, Bis und WohnungNR(Schlüssel in Tab Wohnungen 1:n) gespeichert.
Gleiches Prinzip bei Tab Kurse.
Mein Formular zum erstellen einer Rechnung funktioniert super. Ich wähle den Kunden aus und wähle einfach über endlos Unterformulare Artikel und/oder Kurse und/oder Wohnungen aus die in den jeweiligen Tabellen eingetragen werden.
Nun brauche ich einen Bericht um Rechnungen drucken zu können. Das heißt ich brauche eine Abfrage die mir zu Rechnungsnummer XX einfach den Kunden und sämtliche Einträge aus Tab RechnungszeileArtikel, RechnungszeileKurs, RechnungszeileWohnungen ausgibt. Also eine Abfrage die aus allen acht Tabellen die passenden Werte sucht. Vom Prinzip her klappt das auch, allerdings bekomme ich eben sobald ich die Daten aus der 2. Rechnungszeile Tabelle abgreife doppelte Datensätze und verstehe nicht warum.

Ich hoffe ich habe das ganze nicht komplett falsch aufgebaut und es gibt eine Abfrage die mir unter Angabe der Rechnungsnummer einfach die nötigen Daten auspuckt.

Viele Grüße,

Oskar

Atrus2711
28.04.2011, 11:54
Hi,

ein Bild vom Beziehungsmodell hätte mir mehr geholfen...

Ingesamt scheint es mit bisher so, als ob du einfach alle Tabelle in einer Abfrage verwurstest, ohne dir ganz klar zu sein, was da passiert.

oskarchen
28.04.2011, 12:28
http://s1.directupload.net/images/110428/temp/dm3ij2gr.jpg (http://s1.directupload.net/file/d/2508/dm3ij2gr_jpg.htm)

Atrus2711
28.04.2011, 12:39
An externe Filehoster komm ich hier im Büro nicht ran (geblockt). Meld dich an (kost ja nix) und lads dann direkt im Beitrag hoch. Vielleicht hilft dir ansonsten ein anderer.

oskarchen
28.04.2011, 12:50
Danke für deine Bemühungen :)

Atrus2711
28.04.2011, 13:01
Hi,
wie schon in #2 geschrieben:
Duplikate in der fraglichen Anfrage erhältst du, weil du dort nach mehr Feldern gruppierst als in der ersten. Jede vorkommende Kombination aus den Gruppenfeldern bildet eine Zeile.

Es muss nicht alles in eine Abfrage. Wenn du wirklich Artikel (mittlere Tabellenreihe), Ferienwohnungen etc. in einer rechnung zusammen ausweisen willst, dann löse das doch über Unterberichte. Der Hauptbericht zeigt meinetwegen die Artikelangaben, und die "Seitenstränge" des Beziehungsmodells fließen in Unterberichte ein, die anhand der Rechnungsnummer die Details dazuholen.