Neuigkeiten:

Ist euer Problem gelöst, dann bitte den Knopf "Thema gelöst" drücken!

Mobiles Hauptmenü

Access Abfrage

Begonnen von jmahr, November 30, 2011, 19:15:57

⏪ vorheriges - nächstes ⏩

jmahr

Hallo zusammen,

ich habe mal wieder ein Problem und komme nicht weiter.

Ich habe drei Tabellen tblMitglieder, tblMitgliedEhrungen und tblEhrungsarten.

Ich möchte mit meiner Abfrage nicht die erhaltenen Ehrungen auswerten die bekomme ich mit dieser Abfrage sondern möchte wissen wer in diesem Jahr alles für einen Orden in frage kommt. Hier mal mein Sql. Und als Anlage mal die Abfrage als Grafik. Das kann doch auch nicht so schwierig sein aber ich stehe jetzt irgendwie auf dem schlauch.

SELECT tblMitglieder.NachName, tblMitglieder.Vorname, Year(Date())-Year([Eintrdatum])-IIf((Month(Date())*40+Day(Date()))>=(Month([Eintrdatum])*40+Day([EintrDatum])),0,1) AS [Aktiv seit], tblEhrungsarten.Ehrungsart, tblMitglieder.Aktiv, tblMitglieder.Geschlecht
FROM tblMitglieder INNER JOIN (tblEhrungsarten INNER JOIN tblMitgliedEhrungen ON tblEhrungsarten.EhrungsartID_P = tblMitgliedEhrungen.EhrungsartID_F) ON tblMitglieder.MitgliedID_P = tblMitgliedEhrungen.MitgliedID_F
WHERE (((Year(Date())-Year([Eintrdatum])-IIf((Month(Date())*40+Day(Date()))>=(Month([Eintrdatum])*40+Day([EintrDatum])),0,1))>12) AND ((tblEhrungsarten.Ehrungsart)="Goldenes Vlies") AND ((tblMitglieder.Aktiv)=Yes)) OR (((Year(Date())-Year([Eintrdatum])-IIf((Month(Date())*40+Day(Date()))>=(Month([Eintrdatum])*40+Day([EintrDatum])),0,1))>7) AND ((tblEhrungsarten.Ehrungsart)="Silberne Flamme") AND ((tblMitglieder.Aktiv)=Yes)) OR (((Year(Date())-Year([Eintrdatum])-IIf((Month(Date())*40+Day(Date()))>=(Month([Eintrdatum])*40+Day([EintrDatum])),0,1))>0) AND ((tblEhrungsarten.Ehrungsart)="Frauenhoftororden") AND ((tblMitglieder.Aktiv)=Yes)) OR (((Year(Date())-Year([Eintrdatum])-IIf((Month(Date())*40+Day(Date()))>=(Month([Eintrdatum])*40+Day([EintrDatum])),0,1))>10) AND ((tblEhrungsarten.Ehrungsart)="Goldene Flamme") AND ((tblMitglieder.Aktiv)=Yes)) OR (((Year(Date())-Year([Eintrdatum])-IIf((Month(Date())*40+Day(Date()))>=(Month([Eintrdatum])*40+Day([EintrDatum])),0,1))>4) AND ((tblEhrungsarten.Ehrungsart)="Verdienstorden") AND ((tblMitglieder.Aktiv)=Yes)) OR (((Year(Date())-Year([Eintrdatum])-IIf((Month(Date())*40+Day(Date()))>=(Month([Eintrdatum])*40+Day([EintrDatum])),0,1))>4) AND ((tblEhrungsarten.Ehrungsart)="Goldener Gardestern") AND ((tblMitglieder.Aktiv)=Yes) AND ((tblMitglieder.Geschlecht)="w")) OR (((Year(Date())-Year([Eintrdatum])-IIf((Month(Date())*40+Day(Date()))>=(Month([Eintrdatum])*40+Day([EintrDatum])),0,1))>3) AND ((tblEhrungsarten.Ehrungsart)="Silberner Gardestern") AND ((tblMitglieder.Aktiv)=Yes) AND ((tblMitglieder.Geschlecht)="w")) OR (((Year(Date())-Year([Eintrdatum])-IIf((Month(Date())*40+Day(Date()))>=(Month([Eintrdatum])*40+Day([EintrDatum])),0,1))>9) AND ((tblEhrungsarten.Ehrungsart)="Verdienstorden") AND ((tblMitglieder.Aktiv)=Yes) AND ((tblMitglieder.Geschlecht)="w")) OR (((Year(Date())-Year([Eintrdatum])-IIf((Month(Date())*40+Day(Date()))>=(Month([Eintrdatum])*40+Day([EintrDatum])),0,1))>12) AND ((tblEhrungsarten.Ehrungsart)="Silberne Flamme") AND ((tblMitglieder.Aktiv)=Yes) AND ((tblMitglieder.Geschlecht)="w"));

Gruß

Jogi

[Anhang gelöscht durch Administrator]

jmahr

ich habe es noch mal umgebaut, doch auch so bekomme ich nicht die Mitglieder schon 20 Jahre dabei sind und die zum Beispiel die Silberner Flamme noch nicht bekommen haben.

SELECT tblMitglieder.NachName, tblMitgliedEhrungen.Ehrung, tblMitglieder.Geschlecht, Year(Date())-Year([Eintrdatum])-IIf((Month(Date())*40+Day(Date()))>=(Month([Eintrdatum])*40+Day([EintrDatum])),0,1) AS [Aktiv seit], tblEhrungsarten_1.Ehrungsart, tblMitgliedEhrungen.EhrungsartID_F
FROM tblMitglieder INNER JOIN (tblEhrungsarten AS tblEhrungsarten_1 INNER JOIN tblMitgliedEhrungen ON tblEhrungsarten_1.EhrungsartID_P = tblMitgliedEhrungen.EhrungsartID_F) ON tblMitglieder.MitgliedID_P = tblMitgliedEhrungen.MitgliedID_F
WHERE (((Year(Date())-Year([Eintrdatum])-IIf((Month(Date())*40+Day(Date()))>=(Month([Eintrdatum])*40+Day([EintrDatum])),0,1))>20) AND ((tblMitgliedEhrungen.EhrungsartID_F) Not In (SELECT [EhrungsartID_P] FROM [tblEhrungsarten] WHERE [Ehrung]="Silberne Flamme")));

Gruß

Jogi

database

#2
Hallo,
meine Überlegung ist folgende:

Du suchst alle Mitglieder weiblichen Geschlechts, die schon länger als ZWÖLF Jahre Mitglied sind und in der Tabelle MitgliederEhrungen mit 'Silberner Flamme' NICHT vorkommen.

12 Jahre deswegen, weil die "Silberne Flamme" an weibliche Mitglieder vergeben wird, die schon länger als 12 Jahre Mitgliedschaft aufweisen - (Deinem Screenshot nach zu urteilen).


SELECT M.MitgliedID_P, M.Vorname, M.NachName, M.Geschlecht, Year(Date())-Year([Eintrdatum])-IIf((Month(Date())*40+Day(Date()))>=(Month([Eintrdatum])*40+Day([EintrDatum])),0,1) AS [Aktiv seit]
FROM tblMitglieder M
WHERE (((Year(Date())-Year([Eintrdatum])-IIf((Month(Date())*40+Day(Date()))>=(Month([Eintrdatum])*40+Day([EintrDatum])),0,1))>12)
AND M.Geschlecht = "w"
AND ((M.MitgliedID_P) Not In (SELECT MitgliedID_F FROM tblMitgliedEhrungen ME
                             INNER JOIN tblEhrungsarten E
                                 ON ME.EhrungsartID_F = E.EhrungsartID_P
                             WHERE E.Ehrungsart="Silberne Flamme")));


Leider kann ich das Ding nicht testen hoffe aber dennoch, dass ich in dem Klammernsamasurium keine übersehen habe  :-\

jmahr

Super, danke es funktioniert.
:)

Gruß

Jogi