2017-10-30 6 views
0

Ich habe ein paar Antworten zu diesem Thema durchsucht, aber alle empfehlen die Verwendung von UNION-Abfragen, und ich bin mir ziemlich sicher, dass dies nicht der Fall ist, da die Tabellen Daten extrahieren von sind grundsätzlich anders. Ich werde versuchen, es so gut wie möglich zu erklären.Access-Bericht aus mehreren Abfragen generieren

Ich habe drei Tabellen:

  • Kunden
  • Termine
  • Käufe

ich für den Benutzer möchten in der Lage sein einen einzigen Kunden auszuwählen und präsentiert werden mit einem Bericht mit folgenden Informationen:

  • die alle Kundeninformationen (Name, E-Mail, Adresse etc.)
  • die vom Kunden die alle ausgebucht Alle Termine
  • vom Kunden getätigte Käufe

Das Problem tritt auf, wenn ein Kunde keinen Termin oder einen Einkauf in der Datenbank hat, da die einzige Abfrage, die ich gerade nutze, folgendes ist:

SELECT (info needed) 
FROM (Customer INNER JOIN Purchase ON Customer.ID = Purchase.customerID) 
INNER JOIN Appointment ON Customer.ID = Appointment.customerID; 

Wenn ein Kunde seine customerID nicht in der Tabelle Purchase oder Appointment hat, gibt die resultierende Abfrage eine leere Tabelle zurück, da JOIN keine gemeinsamen Daten zwischen den Tabellen sehen kann.

Ich bin mir nicht sicher, was die beste Vorgehensweise wäre, und ich hoffe, dass hier jemand etwas Licht auf das, was die besten Praktiken in dieser Art von Situation sind, weiß, danke im Voraus.

Vorgeschlagene Bearbeitung, um einige Beispieldaten und gewünschte Ergebnisse hinzuzufügen.

Kunden

ID Name email   address 
1 Bob [email protected] 70 bowman st. 
2 Tom [email protected] 44 shirley av. 
3 Mary [email protected] 4 goldfield rd. 

Käufe

customerID itemID price 
1   23  100 
1   24  150 
3   34  85 

Termine

customerID date 
1   2/10 
2   3/10 
3   3/10 

Nun, wenn ich mit customerID abfragen = 2 Ich möchte die folgende Info

Kundeninfo

name email   address 
Tom [email protected] 44 shirley av. 

Käufe

empty 

Appointments

date 
3/10 
+1

Bearbeiten Sie Ihre Frage und liefern Beispieldaten und gewünschte Ergebnisse. –

Antwort

1

einen linken JOIN anstelle von inneren verbinden. So erhalten Sie Kundendaten, auch wenn er keinen Termin oder Kauf gemacht hat.

SELECT (info needed) 
    FROM Customer Left 
    JOIN Purchase 
    ON Customer.ID = Purchase.customerID 
Left JOIN Appointment 
    ON Customer.ID = Appointment.customerID; 
+0

Ich bin dumm, das ist genau das, was ich tun musste, danke für die schnelle Antwort. – Daniel

+0

Keiner ist dumm :-) Manchmal vergessen wir .. Seine Natur – Valli

+0

Ich werde dies hier fragen, da es keinen anderen Thread garantiert, wissen Sie von einer Möglichkeit, den Bericht in zwei Detailabschnitte zu teilen? Ich weiß über Gruppierung, aber ich habe wirklich nichts, um Dinge zu gruppieren, die Seite ist nur für einen Kunden und die beiden Abschnitte sollten "alle Termine" und "alle Einkäufe" sein. Ist die einzige Möglichkeit, Unterberichte zu verwenden? – Daniel

Verwandte Themen