Access-o-Mania

Access-Forum (Deutsch/German) => Tabelle/Abfrage => Thema gestartet von: alpe am Mai 08, 2012, 22:14:38

Titel: komisches Abfragekonstrukt
Beitrag von: alpe am Mai 08, 2012, 22:14:38
Hallo,

ich steh echt auf dem Schlauch was meine Abfrage angeht.
Also ich habe folgende Tabellen:

Kategorientabelle

IDFahrzTyp
1Ford
2Audi

Datentabelle (die bekomme ich leider so geliefert)

IDNameFahrzTypRennen1FahrzTypRennen2
1Erwin11
2Horst21
3Klaus21

In der Abfrage möchte ich wissen welche Anzahl pro Fahrzeugtyp pro Rennen teilgenommen haben

SOLL:

IDFahrzTypFahrzTypRennen1_AnzFahrzTypRennen2_Anz
1Ford13
2Audi20

Hat da jemand von Euch ne Idee wie ich das machen kann?
Ich bekomme das immer nur für ein "Rennen" hin.
Titel: Re: komisches Abfragekonstrukt
Beitrag von: oma am Mai 09, 2012, 10:59:23
Hallo alpe,

dein Datenmodell ist so nicht in Ordnung! Aufzeichnungfelder wie FahrzeugtypRennen1 u. FahrzeugtypRennen2 sollten tunlichst vermieden werden.

Du brauchst:

tblTyp: Typ_ID, Bezeichnung...
tblFahrer: Fahrer_ID, Nachname....
tblRennen: Renn_ID, Bezeichnung, Fahrer_ID_F, Typ_ID_F      (  .._F steht für Fremdschlüssel)

für deinen jetzigen Tabellenaufbau geht mit den wenig performanten Aggregatfunktionen z.B.

SELECT tblTypen.ID_Fahrzeug, First(tblTypen.Typ) AS Typ,
NZ(DCount("Rennen1","tblFahrer","Rennen1=" & [ID_Fahrzeug]),0) AS Rennen1,
NZ(DCount("Rennen2","tblFahrer","Rennen2=" & [ID_Fahrzeug]),0) AS Rennen2
FROM tblTypen
GROUP BY tblTypen.ID_Fahrzeug


Gruß Oma
Titel: Re: komisches Abfragekonstrukt
Beitrag von: alpe am Mai 11, 2012, 13:50:51
vielen dank,

ich wusste es schon das das datenmodell so nicht stimmt.
leider kann ich es auf die schnelle nicht umstellen
ich hab mir Anzahl der Fhzg pro Rennen jetzt als subqueries gebaut
und dann mit der Fahrzeugtypentabelle "geleftjoined" - das passt.
Titel: Re: komisches Abfragekonstrukt
Beitrag von: oma am Mai 11, 2012, 14:15:48
Hallo,

möglich ohne Verknüpfung der Tabellen und ohne Domänenfunktionen ist auch:

SELECT tblTypen.ID_Fahrzeug, First(tblTypen.Typ) AS Typ,
  (SELECT Count(tblFahrer.Rennen1) AS AnzahlvonRennen1  FROM tblFahrer Where Rennen1= [ID_Fahrzeug]) AS Rennen1,
  (SELECT Count(tblFahrer.Rennen2) AS AnzahlvonRennen1  FROM tblFahrer Where Rennen2= [ID_Fahrzeug]) AS Rennen2
FROM tblTypen
GROUP BY tblTypen.ID_Fahrzeug


Gruß Oma