Ms Access Abfrage enthalten in erstellen

Ich habe 2 Tabellen Adressen und Bestellungen.
Felder in Adressen: ID (Kundennummer), Name
Felder in Bestellungen: ID (Kundennummer), Bestelldatum, Jahr: Jahr(Bestelldatum)

Ich verknüpfe über ID.
Das Ergebnis: Huber Franz kommt 5 mal, weil 5 mal bestellt. Meier 10x usw…
Ich will aber eine Liste in der nur 1 x Meier und 1 x Huber steht. Wie gestalte ich die Abfrage?

Oder gibt es eine Abfrage: „Welche Kunden haben bestellt?“

Danke

Moin

Ganz einfach.
Du gehst in den Entwurfsmodus klickst das Summensymbol an.
Dann erscheint eine zusätzliche Zeile unter deinen Feldnamen in der zunächst Gruppierung steht. Dann ziehst du z.B: das Feld ID in die Abfrage und änderst die Gruppierung in Anzahl.

Gruß aus Bremen und Berlin

Matthias

Hallo Jolana !

Das die doppelten Angaben in der Abfrage erscheinen ist ok. Jetzt stellt sich die Frage, was du mit den Daten vor hast. In einem Bericht kannst du über Gruppenfunktionen die überfüssigen Daten ausblenden.
1x Name 5 x Bestellung. Auch in einem Formular kannst du die Werte so darstellen, dass die doppelten Daten weg sind. Was hast du vor damit ??

Gruß

Christof

Herzlichsten Dank! Habe bisher immer mit Grupierung gearbeitet, die anderen Funktionen nicht benutzt. Ein Problem ist aber entstanden:
Es funktioniert, wenn ich aus Tabelle Aadressen die ID reinzieh und sonst kein weiteres Feld.
Indem Moment, wo ich z.B. „Name“ als weiteres Feld aus Tabelle Adressen mit reinzieh, steht der Huber wieder 5 mal drin!Obwohl im Funktionsfeld die ID immer noch auf „Anzahl“ steht.

Ich will jetzt diese Daten mit einem Emailfeld ins Outlook Adressbuch importieren.

Moment…
Feld1 = ID aus Adressen Gruppierung
Feld2 = Name aus Adressen Gruppierung oder letzter Wert, wenn das erste nicht gehen sollte, was dann aber nicht normal ist.
Feld3 = ID aus Bestellungen Anzahl
Wenn Huber nur einmal mit einer ID in Adressen steht, dann kann er auch nur einmal auftauchen. Taucht er öfter auf mit mehreren IDs, dann ist an der Grundstruktur der DB was nicht ganz koscher.

Da machst Du eine neue Auswahl-Abfrage (egal was) und machst die Abfrage mal bitte als SQL-Abbfrage auf.
Entfernst Deinen Code und gibst folgenden ein:

SELECT DISTINCT Adressen.Kunden\_Name
FROM Adressen INNER JOIN Bestellungen ON Adressen.ID\_Kunde = Bestellungen.Kunden\_ID
ORDER BY Adressen.Kunden\_Name;

oder hier mit Datum nach dem 30.6.11:

SELECT DISTINCT Adressen.Kunden\_Name
FROM Adressen INNER JOIN Bestellungen ON Adressen.ID\_Kunde = Bestellungen.Kunden\_ID
WHERE (((Bestellungen.BestellDatum)\>#2/28/2011#))
ORDER BY Adressen.Kunden\_Name;

Du musst die Tabellen gemäß dem Code und den Anmerkungen 1+2 noch anpassen!

Anmerkung 1:
Nimm NIE Name als Feldname/Spalten-Titel, das gibt Verwechslungen mit z.B. Button.Name !!! oderTextField.Name!!! oder…Achte auf reservierte Worte!
Deswegen oben Kunden_Name!!!

Anmerkung 2:
Jede eindeutige Benamsung der Felder ist vorzuziehen. Was als original Schlüssel (also ID) gilt heißt dann bei mir z.B. ID_Adresse in der 2. Tabelle, wo diese ID mehrfach vorkommen kann heißt sie dann umgekehrt Adresse_ID. Damit kann man beide besser auseinanderhalten, weiß aber, dass sie Verbindung haben.

Anmerkung 3:
Bei solchen Fragen hilft oft http://www.donkarl.com/, dort Access - FAQ

Ergebnis ist korrekt.

Über Summenbildung von ID (Funktion: Gruppierung) bekommst du je Kunde dann einen Datensatz.
Wenn Du dann nochmal Summenbildung von ID mit Funktion Anzahl durchführst, bekommst Du auch die Anzahl Bestellungen pro Kunde angezeigt

Gruß
Ulli

Dazu solltest du aus der normalen Abfrage eine Tabellenerstellungsabfrage machen und damit eine neue Tabelle erstellen.
Diese kannst du dann in Outlook importieren…

Ich will jetzt diese Daten mit einem Emailfeld ins Outlook
Adressbuch importieren.

Allerherzlichsten Dank für Deine Bemühungen! Hast mir sehr weitergeholfen. Bin schwer beeindruckt von Deiner Hilfsbereitschaft!
Hans Sakowski

bin leider auf Urlaub

alles geht…

Du mußt halt wissen, was die Liste ausgeben soll.
Wenn die Bestelldaten angezeigt werden sollen, muß sich die Abfrage zwangsläufig so verhalten, wie von Dir beschrieben, und jede Person pro Bestellung einmal aufführen.

Wenn jede Person nur einmal erscheinen soll, kann die Abfrage keine Inhalte von Bestell-Datensätzen anzeigen.
Entweder darf man dann nur die Personen-Tabelle in die Abfrage aufnehmen, oder, falls nur die Personen mit (mindestens einer) Bestellung aufgeführt sein sollen, muß man die Felder der Bestell-Tabelle weglassen und die Abfrage auf die Felder der Personen-Tabelle gruppieren (einfach „Funktionen“ aktivieren, dann macht der Abfrage-Assistent das von alleine so).

Wie ist denn in Deiner Abfrage die Beziehung zwischen den beiden Tabellen eingestellt?
Normal müßte sie auf „zeige alle aus Personen, aber nur die aus Bestellungen (…)“ stehen, aber in meinem zuletzt genannten Beispiel auf „zeige nur Datensätze, die in beiden Tabellen enthalten sind“.

klappt jetzt?

…oder es gibt für mein zuletzt genanntes Beispiel noch eine sinnvolle Ergänzung:

Nimm von der Bestell-Tabelle doch noch ein Feld mit dazu, nämlich das Verweisfeld auf die Personen-ID, und stell bei dem in der Funktions-Zeile von „Gruppierung“ um auf „Anzahl“. Dann siehst Du zu jeder Person noch, wieviele Bestellungen es gibt.
Und wenn Du das so machst, kannst Du auch die Beziehung ändern in die erste Variante „zeige alle aus Personen, aber nur die aus Bestellungen (…)“ und dann in diesem Feld „Anzahl von ID“ als Kriterium eintragen:
> 0
Dann kannst Du die Abfrage nämlich flexibel nutzen, auch mal eintragen > 5 zum Beispiel.
Und wenn Du > -1 oder ähnlich einträgst, zeigt sie alle Personen, ggf. mit der Anzahl 0 (Du könntest auch das Kriterium löschen natürlich, aber wenn Du die Zahl änderst, weißt Du hinterher noch, wie Du das Kriterium einstellen mußt).

Super! Hat mir sehr geholfen. Vielen Dank für deine Bemühung!
Hans Sakowski

Vielen dank für die bemühung!Hat geholfen!
hans sakowski

alles klar :smile:

würdest Du noch verraten, welche Variante Du gewählt hast?

nur neugierhalber…

…und falls Du eine Variante mit Anzahl von Bestellungen gewählt hast, kannst Du noch mehr spielen…

Kannst mal ein Datumsfeld der Bestell-Tabelle z.B. noch mit reinnehmen und bei dem in der Funktions-Zeile von „Gruppierung“ auf „Maximum“ oder „erster Wert“ etc. umstellen. Siehst Du ja jeweils in der Datenblattansicht, was die Abfrage dann zeigt.

So kannst Du Dir von jedem mit mindestens einer Bestellung z.B. anzeigen lassen, wann er das letzte mal etwas bestellt hat, usw…

Ich habe das mit 2 Abfragen und einer Tabellenerstellungsabfrage gemacht.
Abfrage1: normale Auswahlabfrage, Beziehung Kunden - Buchungen; Kriterien eine bestimmte Kursart (aus Buchungen)wahr/falsch-Feld. Also gemischt felder aus adressen und Kursbuchungen.(alles mit Funktion Gruppierung)
Dann eine Abfrage2 erstellt aus Adressen und Abfrage1, über ID verknüpft.; diesmal die adressen-ID mit Funktion „Anzahl“. Diese Abfrage dann umgewandelt in eine Tabellenerstellungsabfrage RECHERCHE. hier war dann jede Adresse nur 1 x.
Diese Tabelle dann in Outlook importiert.(geht mit Outlook-Sync von andreas Schultz ganz gut.
Danke nochmal!
Hans

alles klar :smile:

würdest Du noch verraten, welche Variante Du gewählt hast?

nur neugierhalber…

Wenn Du über ACCESS verfügst (davon gehe ich eigentlich aus), schau Dir doch einmal die Beispieldatenbank Nordwind an (insbesondere die Tabelle „Bestellungen“, „Bestelldetails“, „Artikel“ und „Kunden“ und wie diese miteinander verknüpft sind. Was Du vermutlich möchtest, ist eine Auflistung der Kunden mit den jeweiligen Bestellungen. Das funktioniert am besten mit einem (Abfrage-) Formular oder einem Bericht, in denen man nach bestimmtem Kriterien (z.B. Kunden, Zeiträumen oder Ähnliches) gruppieren kann. Hierzu ist aus der Beispieldatenbank das Formular „Bestelldetails“ sehr lehrreich.
Ich weiß, dass das alles vielleicht etwas viel auf einmal ist, aber es hilft beim Verständnis von ACCESS wirklich weiter, in der Nordwind etwas herumzustöbern.

Danke! Ha ich zwar flüchtig schon gemacht, werd mich aber noch genauer damit beschäftigen nach Deinem Hinweis!
Hans Sakowski