Doppelte Daten nur einmal ausgeben- Access

Tigger09

Grünschnabel
Hallo zusammen,
ich bin neu hier und hoffe auf eure Hilfe. Mein Problem ähnelt dem Thema in dem Beitrag

Doppelte Werte mit count nur einmal zählen

aber ich bekomme es nicht auf mein Problem "umgeschrieben".

Ich habe eine Tabelle in Access. Diese Tabelle hat folgende Werte : Personennummer, Vorgangsnummer, Wohnort und Anspruch

Die Personennummer kann nur einmal vorkommen. Die Vorgangsnummer kann jedoch mehrfach vorkommen (da mehrerer Personen in einem Vorgang abgelegt werden können).
Nunmehr bin ich bei den Auswertungen, wo ich auch mit dem Filter "Wohnort" arbeite. Das funktioniert auch so lange, wie ich die Personen anzeigen lasse.
Jetzt ist es so dass ich auch zusätzlich eine Auswertung machen möchte wo mir nur die Vorgänge angezeigt werden. Also ich will nur noch die Vorgangsnummer, den Wohnort und den Anspruch sehen.

Ich habe es mit der SQL-Anweisung Distinct schon versucht, das klappt aber leider nur wenn ich NUR die Vorgangsnummer nehme, die Felder Wohnort und Anspruch fehlen mir dann.
Habt ihr eine Idee wie ich mir das anzeigen lassen kann?

Schonmal vorab vielen Dank für eure Hilfe.
 

Yaslaw

alter Rempler
Moderator
Mit Disitinct oder GROUP BY. Oder DCOUNT() wenn du die Summe innerhalb der Poersoendaten brauchst.
Für weitere Hilfe habe ich zu wenig Infos. Zeig mal ein wenig von deiner Lösung.
Achja, die Personendaten dürfen bei DISITNCT und GROUP BY natürlich nicht dabei sein, sonst kommst du nicht auf die Vergansanzahl.
 

Tigger09

Grünschnabel
Hallo,

also das wäre mein Versuch ohne Group
SQL:
Select
 tbl_Personendaten.Wohnort,
 tbl_Personendaten.Leistungsbeginn,
 P1.BG
From tbl_Personendaten,
         (Select Distinct
           P.BG
          From tbl_Personendaten AS P
          ) AS P1

Hier ist es denn so, dass er mir zu jeder Vorgangsnummer jeweils einen Datensatz anzeigt. Das heißt ich habe im Moment 3 Vorgangsnummern zu 4 Personen. Bei jeder Person ist auch der Wohnort hinterlegt, er zeigt mir also jetzt 12 anstatt 3 Datensätze an.

Wenn ich das mit Group by Versuche, also so:

SQL:
Select
 tbl_Personendaten.Wohnort,
 tbl_Personendaten.Leistungsbeginn,
 P1.BG
From tbl_Personendaten,
         (Select Distinct
           P.BG
          From tbl_Personendaten AS P
          ) AS P1

      Group BY
      P1.BG

sagt er mir "In der Abfrage ist der angegebene Wohnort nicht als Bestandteil einer Aggregatfunktion enthalten"

Dann habe ich versucht die Reihenfolge zu drehen, also so:

SQL:
Select
 P1.BG,
 tbl_Personendaten.Wohnort,
 tbl_Personendaten.Leistungsbeginn
 From tbl_Personendaten,
         (Select Distinct
           P.BG
          From tbl_Personendaten AS P
          ) AS P1

aber auch do bekommen ich 12 anstatt 3 Datensätze raus

Ich verstehe nicht was ich da falsch mache, vielleicht hänge ich da aber auch schon so lange dran dass ich das nicht mehr sehe :(
 
Zuletzt bearbeitet von einem Moderator:

Tigger09

Grünschnabel
Ich habe es mal weiter probiert, aber auch da bekomme ich 12 Datensätze angezeigt und nicht 3 :(

Select
P2.BG,
tbl_Personendaten.Wohnort,
tbl_Personendaten.Leistungsbeginn


From tbl_Personendaten,
( Select P1.BG
From
(Select Distinct
P.BG
From tbl_Personendaten AS P
) AS P1

GROUP BY
P1.BG
) AS P2
 

Yaslaw

alter Rempler
Moderator
Ganz unabhängig von DISTINCT oder GROUP BY. Du vervielfachst deine Daten. Wenn 5 verschiedene B6 Exisitieren und sagen wir mal 20 Einträge in tbl_Personendaten,, dann ergibt das 5*20 also 100 Zeilen ausgabe. Da muss ein JOIN oder eine WHERE-Verknüpfunn rein.

Was ist eigentlich B6?

1) Versuch. Ein DISTINCT auf B6 und nachher mit allen Daten mischen. Da kannst du Zählen was du willst. Gibt Schrott. Das Problem habe ich gerade am Anfang dieser Antwort geliefert.

2) Versuch: Bei einem GROUP BY muss jedes Feld irgendwie agreggiert werden. Mittels GROUP, SUM, FIRST etc. Ist das Einmaleins von GROUP BY

3) Versuch. Wieder das sinnlose Aufsumieren. Unterscheidet sichnicht vom 1. Versuch

Vergiss alle 3 Varienten. Sind in der Umsetzung alle Schrott. Du musste bei den Personendaten überlegen, was er nehmen soll. Wenn 3 Personen zu einem Vorgang gehören, muss die DB wissen, welchen der 3 angezeigt werden soll, wenn man nur ein Eintrag pro Vorgang haben will.
Das geht in deine Richung: [SQL] Aktuelle Einträge pro Gruppe auslesen [Yaslaw.Info]

Ps: Bitte dein Code in Code-Tags setzen. Ansonsten sind sie unlesbar. In deinem erten Posting mit SQL habe ich das für dich gemacht, aber du kannst das auch selber.
 

Yaslaw

alter Rempler
Moderator
Ich habe es mal weiter probiert, aber auch da bekomme ich 12 Datensätze angezeigt und nicht 3 :(

Select
P2.BG,
tbl_Personendaten.Wohnort,
tbl_Personendaten.Leistungsbeginn


From tbl_Personendaten,
( Select P1.BG
From
(Select Distinct
P.BG
From tbl_Personendaten AS P
) AS P1

GROUP BY
P1.BG
) AS P2
DISTINCT auf ein Feld und dann ein GROUP BY auf dasselbe - total sinnlos. Entweder oder. Den Problem liegt nicht im Subquery sondern um Hauptquery.

Ein Beispiel, da wird einfach die erste Person angezeigt die gefunden wird. Annahme, es gibt eine Personal_id
SQL:
SELECT
 p.bg,
 p.personal_id,
 p.wohnort,
 p.leistungsbeginn
FROM 
    tbl_Personendaten p,
    inner join (
        SELECT bg, FIRST(personal_id) AS first_id
        FROM tbl_Personendaten
        GROUP BY bg
    ) AS p_first
    on p.personal_id = p_first.first_id AND p.bg = p_first.bg
 

Tigger09

Grünschnabel
Hi also BG beschreibt die Vorgang, das heißt bei mir so :).

Also aus der Tabelle Personendaten soll er nur die Werte BG, Wohnort und Leistungsbeginn nehmen, aber jeder Vorgangsnummer (BG) nur einmal auswerfen.
Das mit den Code-Tags kenne ich noch nicht, das ist mein erster Post. Ich versuche das beim nächsten mal umzusetzen :)
 

Yaslaw

alter Rempler
Moderator
Aber der Wohnort ist pro Person unterschiedlich. Der ist ja nicht an den Vorgang geknüpft.

Das Datenmodel scheint mir nicht so umwerfend zu sein. Der LEistungsbeginn und andere Daten zum Vorgang gehören eigenlich in eine andere Tabelle.
 

Tigger09

Grünschnabel
Aber der Wohnort ist pro Person unterschiedlich. Der ist ja nicht an den Vorgang geknüpft.

Das Datenmodel scheint mir nicht so umwerfend zu sein. Der LEistungsbeginn und andere Daten zum Vorgang gehören eigenlich in eine andere Tabelle.

Hi, nein. Der Vorgang hat nur einen Wohnort. Aber in diesem Vorgang können mehrere Personen aufgelistet sein. Da ich aber Auswertungen nach Wohnort haben muss (einmal Person/einmal Vorang) ist der Wohnort mit bei den Personen erfasst.

Ich habe deinen Code angepasst versucht. der schmeißt mir den Fehler "Syntaxfehler in From-Klausel" raus und markiert mir "inner"
 

Yaslaw

alter Rempler
Moderator
Dann lass inner weg. OK, Wenn der Wohnohrt und leistungsbeginn pro bg eindeutig ist (wirklich ein falsches Datenmodel) dann reicht das folgendes
SQL:
SELECT DISTINCT
    p.bg,
    p.wohnort,
    p.leistungsbeginn
FROM 
    tbl_Personendaten p

Tipp: überabreite das Datenmodel. Du wirst mit dem bestehenden Excel-Mischmasch keine Freude haben