Access Doppelte Einträge bei Abfrage
Hallo ich habe ein Problem mit einer Abfrage bei Access und zwar ist das so:
Ich habe eine tabelle in der drin steht: Arbeiter Projekt Tätigkeit Datum Dauer
und das Problem ist wenn ein Arbeiter an mehreren Projekten gearbeitet hat taucht er in meiner Abfrage doppelt auf
In der Abfrage möchte ich wissen wieland der Arbeiter ind dem Monat gebarbeitet hat
für den Arbeiter hab ich eine Kombilist dann noch ne kombilist für Monat und dann noch ein Textfeld für die ausgabe der gesamtstunden
Das Problem ist Wenn ich jetzt die Kombilist mit dem Arbeiter aufklappe steht der Arbeiter der an mehreren Projekten gearbeitet hat auch so oft drin wie Projekte
und Pro Arbeiter gibt es in der Kombilistfür Monate einen extramonat
was tun
4 Antworten
Das Problem mit dem Kombifeld kannst du lösen, indem du in den Eigenschaften des Kombifeldes die Datensatzherkunft änderst. Möglicherweise musst du hier einige Felder gruppieren oder rausschmeissen. Ist schwierig zu beurteilen, wenn man die Datenbank nicht vor Augen hat.
Ergänzend zu meinem ersten Vorschlag (den Du Dir gut merken solltest, weil der oft gebraucht wird): Du gibst im select nur die Felder an, die Du nur einmal haben möchtest und ergänzt den select am Schluss mit:
group by feld1, feld2 usw.
Wichtig ist, dass alle Felder des select in der group by aufgezählt werden müssen. Den select kannst dann mit Funktionen erweitern: count(stern) zeigt an wie oft, sum(feld) bildet die Summe eines numerischen Feldes (muss als not null definiert sein) oder max(datum) zeigt das letzte Datum an. Für stern musst Du das Sternchen auf der Tastatur benutzen, hier lässt sich das nicht schreiben.
Solche Probleme kannst Du mit einer verschachtelten Abfrage lösen, einem sog. Subselect.
Zunächst stellst in einem select den Primärschlüssel aller betroffenen Fälle her, egal wie oft der vorkommt. Diesen select verwendest Du jetzt im Hauptselect als Subselect (steht in Klammern):
select feld1, feld2, usw from tabelle where prim in (select prim from tebelle where ...)
Der Subselect erstellt intern eine Tabelle der Primärschlüssel aller betroffenen Sätze, der Hauptselect prüft nur, ob dieser Schlüssel in der internen Tabelle vorhanden ist oder nicht, egal wie oft. wenn der Primärschlüssel mehrteilig ist, musst Du diesen in Klammern setzen:
where (prim1, prim2) in (select prim1, prim2 from...)
Es empfieht sich, den Subselect zuerst zu erstellen und vorab zu prüfen.
benutze DISTINCT