Abfragen in Acccess 97

Hallo,

ich brauche offensichtlich Nachhilfeunterricht in Abfragen.

Mein Problem:

Ich habe eine Datei mit ca. 80000 Datensätzen, in der folgende Felder vorhanden sind:

Mandant
Kundennr
BuchungsBetrag
ÜberfälligkeitinTagen

und noch andere Felder, die nicht von Belang sind.

Kriterien:
Mandant ist „001“
Betrag >0
ÜberfälligkeitinTagen =0) AND ((Belegdatenaktuell.UeberfaelligkeitinTagen)>=0))
ORDER BY Belegdatenaktuell.Mandant, Belegdatenaktuell.Kundennr;

Variante Abfrage2: Es soll aufsummiert werden, wenn Mandant, Kundennr und ÜberfälligkeitinTagen übereinstimmt, und das ganze dann in eine neue Tabelle ausgegeben werden.

SELECT Belegdatenaktuell.Mandant, Belegdatenaktuell.Kundennr, Belegdatenaktuell.UeberfaelligkeitinTagen, Sum(Belegdatenaktuell.Buchungsbetrag) AS [Summe von Buchungsbetrag] INTO ÜFSummeEigene
FROM Belegdatenaktuell
WHERE (((Belegdatenaktuell.Buchungsbetrag)>=0) AND ((Belegdatenaktuell.UeberfaelligkeitinTagen)>=0))
GROUP BY Belegdatenaktuell.Mandant, Belegdatenaktuell.Kundennr, Belegdatenaktuell.UeberfaelligkeitinTagen
HAVING (((Belegdatenaktuell.Mandant)=„001“))
ORDER BY Belegdatenaktuell.Mandant, Belegdatenaktuell.Kundennr, Belegdatenaktuell.UeberfaelligkeitinTagen DESC;

Die Ergebnisse der beiden Abfragen stimmen leider nicht überein, ich kann noch 1-2 Varianten liefern, die ebenfalls nicht stimmen.

Ich kapiere bloss nicht, was an den Abfragen falsch ist.

Jemand eine Idee, bin ein bißchen unter Druck, weil ich in 3 Tagen mit der Programmierung fertig sein sollte und an dieser Stelle nie und nimmer mit Problemen gerechnet habe.

Danke für Eure Hilfen im Voraus

Peter

Mahlzeit,

ich brauche offensichtlich Nachhilfeunterricht in Abfragen.

das hast du jetzt gesagt :smile:

Zunächst einmal widersprechen sich deine Kriterien hier mit denen deiner Abfragen:

Kriterien:
Mandant ist „001“
Betrag >0

(beide Abfragen nennen hier >=0 )

ÜberfälligkeitinTagen

(beide Abfragen nennen hier >=0 )

Variante Abfrage1: Es wird nicht aufsummiert, sondern nur die
Daten in einer neuen Tabelle ausgeben, die den Kriterien
entsprechen, die dann gebildete Quersumme via Excel stimmt.

Dann mach das doch so, warum Variante 2? :smile:

SELECT Belegdatenaktuell.Mandant, Belegdatenaktuell.Kundennr,
Belegdatenaktuell.Buchungsbetrag,
Belegdatenaktuell.UeberfaelligkeitinTagen
FROM Belegdatenaktuell
GROUP BY Belegdatenaktuell.Mandant,
Belegdatenaktuell.Kundennr, Belegdatenaktuell.Buchungsbetrag,
Belegdatenaktuell.UeberfaelligkeitinTagen
HAVING (((Belegdatenaktuell.Mandant)=„001“) AND
((Belegdatenaktuell.Buchungsbetrag)>=0) AND
((Belegdatenaktuell.UeberfaelligkeitinTagen)>=0))
ORDER BY Belegdatenaktuell.Mandant,
Belegdatenaktuell.Kundennr;

Ich habe mir erlaubt, das ein bißchen aufzudröseln. Diese dämliche Access-Syntax ist einfach nicht zu lesen:

 SELECT Mandant, 
 Kundennr, 
 Buchungsbetrag, 
 UeberfaelligkeitinTagen
 FROM Belegdatenaktuell
GROUP BY Mandant, 
 Kundennr, 
 Buchungsbetrag, 
 UeberfaelligkeitinTagen
 HAVING Mandant="001" 
 AND Buchungsbetrag \>=0 
 AND UeberfaelligkeitinTagen \>=0
ORDER BY Mandant, Kundennr;

Das ist nicht ganz das, was du willst. Wenn du nicht aufsummieren willst, dann brauchst du keine Gruppierung. Ansonsten läufst du Gefahr, daß Datensätze mit gleichen Kriterien zusammegefaßt werden - was schon für sich die unterschiedlichen Ergebnisse erklären würde. Richtig wäre:

 SELECT Mandant, 
 Kundennr, 
 Buchungsbetrag, 
 UeberfaelligkeitinTagen
 FROM Belegdatenaktuell
 WHERE Mandant="001" 
 AND Buchungsbetrag \>=0 
 AND UeberfaelligkeitinTagen \>=0
ORDER BY Mandant, Kundennr;

wobei hier, da der Mandant vorgegeben wird, das Ganze vereinfacht werden könnte:

 SELECT Kundennr, 
 Buchungsbetrag, 
 UeberfaelligkeitinTagen
 FROM Belegdatenaktuell
 WHERE Mandant="001" 
 AND Buchungsbetrag \>=0 
 AND UeberfaelligkeitinTagen \>=0
ORDER BY Kundennr;

Variante Abfrage2: Es soll aufsummiert werden, wenn Mandant,
Kundennr und ÜberfälligkeitinTagen übereinstimmt, und das
ganze dann in eine neue Tabelle ausgegeben werden.

SELECT Belegdatenaktuell.Mandant, Belegdatenaktuell.Kundennr,
Belegdatenaktuell.UeberfaelligkeitinTagen,
Sum(Belegdatenaktuell.Buchungsbetrag) AS [Summe von
Buchungsbetrag] INTO ÜFSummeEigene
FROM Belegdatenaktuell
WHERE (((Belegdatenaktuell.Buchungsbetrag)>=0) AND
((Belegdatenaktuell.UeberfaelligkeitinTagen)>=0))
GROUP BY Belegdatenaktuell.Mandant,
Belegdatenaktuell.Kundennr,
Belegdatenaktuell.UeberfaelligkeitinTagen
HAVING (((Belegdatenaktuell.Mandant)=„001“))
ORDER BY Belegdatenaktuell.Mandant,
Belegdatenaktuell.Kundennr,
Belegdatenaktuell.UeberfaelligkeitinTagen DESC;

Auch hier ein wenig gelichtet:

 SELECT Mandant, 
 Kundennr, 
 UeberfaelligkeitinTagen, 
 Sum(Buchungsbetrag) AS [Summe von Buchungsbetrag] 
 INTO ÜFSummeEigene
 FROM Belegdatenaktuell
 WHERE Buchungsbetrag \>=0 
 AND UeberfaelligkeitinTagen \>=0 
GROUP BY Mandant, 
 Kundennr, 
 UeberfaelligkeitinTagen
 HAVING Mandant="001"
ORDER BY Mandant, 
 Kundennr, 
 UeberfaelligkeitinTagen DESC;

Die Ergebnisse der beiden Abfragen stimmen leider nicht
überein, ich kann noch 1-2 Varianten liefern, die ebenfalls
nicht stimmen.

Die Ergebnisse der beiden Abfragen können auch nicht übereinstimmen, weil sie ganz unterschiedliche Zusammenhänge beschreiben. Aber auch hier mußt du unterscheiden zwischen Auswahl- und Gruppenkriterien:

 SELECT Mandant, 
 Kundennr, 
 UeberfaelligkeitinTagen, 
 Sum(Buchungsbetrag) AS [Summe von Buchungsbetrag] 
 INTO ÜFSummeEigene
 FROM Belegdatenaktuell
 WHERE Mandant="001" 
 AND Buchungsbetrag \>=0 
 AND UeberfaelligkeitinTagen \>=0 
GROUP BY Mandant, 
 Kundennr, 
 UeberfaelligkeitinTagen
ORDER BY Mandant, 
 Kundennr, 
 UeberfaelligkeitinTagen DESC;

Diese Variante sollte die richtige sein; (meine) Variante 1 sollte in Zusammenhang mit der Excel-Aufsummierung das gleiche ergeben.
Und überprüfe, ob deine >= nicht Teil des Problems waren!

Danke für Eure Hilfen im Voraus

Hoffe, geholfen zu haben.

Gruß

Sancho

Hallo Sancho,

Du hattest Recht, die Gruppierungen waren das Problem. Kann man ahnen, dass ein Kunde am gleichen Tag 2 Rechnungen mit identischen Beträgen prodziert? Ja, kann man, weil es vorkommen könnte und man dann die Abfragen auch so bauen muss.

Danke für die Hilfe

Peter