Neuigkeiten:

Wenn ihr euch für eine gute Antwort bedanken möchtet, im entsprechenden Posting einfach den Knopf "sag Danke" drücken!

Mobiles Hauptmenü

Abfrage auf div. Ehrungen beschränken

Begonnen von mad, Januar 13, 2020, 10:51:20

⏪ vorheriges - nächstes ⏩

Hondo

OK hab mir mal deine Abfrage angesehen.
ist eigentlich einfach.
Es gibt 2 Fälle: 1. Jemand tritt in Abteilung1 ein, egal ob er später wechselt oder nicht.
und 2. Jemand tritt sofort in Abteilung2 ein. Ob das möglich musst du festlegen.
Dann lautet das Abfragefeld für beide Möglichkeiten wie folgt:
Dienstjahre: Wenn(IstNull([EintrittFW1]) Und Nicht IstNull([EintrittFW2]);Jahr(Jetzt())-Jahr([EintrittFW2]);Jahr(Jetzt())-Jahr([EintrittFW1]))

Wenn IMMER zuerst in Abteilung1 eingetreten werden muss, dann ist es noch viel einfacher:
Dienstjahre: Jahr(Jetzt())-Jahr([EintrittFW1])

Ich denke mal sowas braucht man im Frühjahr für die Mitgliederversammlung, daher wird das aktuelle Jahr hier nicht mitgezählt. Falls doch, brauchst du wieder das +1.

Die Felder ErsAustrittFW1 und ErsAustrittFW2 sind jetzt überflüssig.
Ob jemand wechset von 1 nach 2 spielt doch eigentlich keine Rolle, da dabei doch keiner zeitlicher Abstand besteht - oder?

Gruß Andreas

mad

Hallo,

ZitatDienstjahre: Jahr(Jetzt())-Jahr([EintrittFW1])
das ist nur möglich wenn der Kollege von Anfang an dabei ist und nicht wechselt.

Aber gibt natürlich auch Kollegen, als Bespiel unser Kölner Kollege (Name37). Hat seine Dienstzeit in Köln begonnen, AustrittFW1-EintrittFW1, dann hatte er ein paar Jahre pausiert. Und ist seid 2011 (Datum()-EintrittFW2) bei uns nocht aktuell in der Feuerwehr.

Dieser Code:
ZitatDienstjahre: Wenn(IstNull([EintrittFW1]) Und Nicht IstNull([EintrittFW2]);Jahr(Jetzt())-Jahr([EintrittFW2]);Jahr(Jetzt())-Jahr([EintrittFW1]))
berücksichtigt an erstem Anschein nicht wenn ein Kollegen bereits ausgeschieden ist.
EintrittFW1 kann normalesweise niemals "Null" sein. Das ist nur der Fall, wenn der Kollege nur in der Verein eingetretten ist. Wenn unter EintrittFW1 kein Datum steht muss der Datensatz nicht berücksichtigt werden. Null kann nur AustrittFW2 und EintrittFW2 sein

Gruss
mad

MzKlMu

#17
Hallo,
was ist damit ?
ZitatWillst Du dann wissen, wer z.B. im nächsten Jahr zur Ehrung ansteht?
Oder für dieses Jahr ?
Bitte mal noch beantworten.

Im Anhang mein Vorschlag.
Öffne die Abfrage "WerHatWas".
Und sieh Dir die Abfrage im Entwurf an, da siehst wie ich das mit der Verknüpfung gemeint habe.
Das Nz in der Formel für das Jahr dürfte überflüssig sein, zumal Du keinen Ersatzwert übergibst. Nz macht aus der Zahl Text was hier auch nicht zu gebrauchen ist.
Die Formel selbst habe ich jetzt nicht geprüft, was ist z.B. mit Name2, der hat keine Jahre. Ist das richtig?
Gruß Klaus

Hondo

#18
Zitat von: mad am Januar 20, 2020, 22:23:24
berücksichtigt an erstem Anschein nicht wenn ein Kollegen bereits ausgeschieden ist.
Doch, ist doch nur das eine Feld.
Die Abfrage sieht so aus:
SELECT DISTINCT Personal.PID, Personal.NameP, IIf(IsNull([EintrittFW1]) And Not IsNull([EintrittFW2]),Year(Now())-Year([EintrittFW2]),Year(Now())-Year([EintrittFW1])) AS Dienstjahre, Personal.EintrittFW1, Personal.EintrittFW2, Personal.AustrittFW1
FROM Personal
WHERE (((Personal.AusgeschiedDatum) Is Null));


Wenn aber zwischen Austritt1 und Eintritt2 eine Pause von 1 oder mehreren Jahren liegen kann, dann ist das natürlich zu berücksichtigen.
SELECT DISTINCT Personal.PID, Personal.NameP, Personal.EintrittFW1, IIf(IsNull([AustrittFW1]),Now(),[AustrittFW1]) AS Austritt1, Year([Austritt1])-Year([EintrittFW1]) AS Jahre1, IIf(IsNull([EintrittFW2]),Now(),[EintrittFW2]) AS Eintritt2, IIf(IsNull([AustrittFW2]),Now(),[AustrittFW2]) AS Austritt2, Year([Austritt2])-Year([Eintritt2]) AS Jahre2, [Jahre1]+[Jahre2] AS Dienstjahre
FROM Personal
WHERE (((Personal.AusgeschiedDatum) Is Null));


Gruß Andreas

MzKlMu

@Andreas
Bei Deiner Abfrage kommen bei Name2 9 Dienstjahre raus, das sind doch aber nur 6 (2011 - 2017) ???
Gruß Klaus

Hondo

Bist du sicher?
Egal, hab die Abfrage eben zusammengefasst wegen dem Modulo für die runden Dienstjahre. Da stimmts (wieder).
Wenn du z.B. alle Runden Dienstjahre ab 10 Jahre - also 10,15,20,25... ehren möchtest, dann würde das so aussehen:

SELECT DISTINCT Personal.PID, Personal.NameP, IIf(IsNull([AustrittFW1]),Year(Now()),Year([AustrittFW1]))-Year([EintrittFW1])+IIf(IsNull([AustrittFW2]),Year(Now()),Year([AustrittFW2]))-IIf(IsNull([EintrittFW2]),Year(Now()),Year([EintrittFW2])) AS Dienstjahre
FROM Personal
WHERE (((IIf(IsNull([AustrittFW1]),Year(Now()),Year([AustrittFW1]))-Year([EintrittFW1])+IIf(IsNull([AustrittFW2]),Year(Now()),Year([AustrittFW2]))-IIf(IsNull([EintrittFW2]),Year(Now()),Year([EintrittFW2])))>=10)
AND (((IIf(IsNull([AustrittFW1]),Year(Now()),Year([AustrittFW1]))-Year([EintrittFW1])+IIf(IsNull([AustrittFW2]),Year(Now()),Year([AustrittFW2]))-IIf(IsNull([EintrittFW2]),Year(Now()),Year([EintrittFW2]))) Mod 5)=0)
AND ((Personal.AusgeschiedDatum) Is Null));


Gruß Andreas

Hondo

Zitat von: MzKlMu am Januar 21, 2020, 00:08:24
@Andreas
Bei Deiner Abfrage kommen bei Name2 9 Dienstjahre raus, das sind doch aber nur 6 (2011 - 2017) ???
Eben nochmals getestet mit der geposteten Abfrage, da steht als Ergebnis 6 Dienstjahre in der Abfrage

MzKlMu

#22
Hallo,
ich habe 9. Siehe Bild.

Aber diese Abfrage tut es auch:
SELECT NameP, EintrittFW1, AustrittFW1, EintrittFW2, AustrittFW2,
Year(Nz([AustrittFW1],Date()))-Year([EintrittFW1])+Nz(Year(Nz([AustrittFW2],Date()))-Year([EintrittFW2]),0) AS Jahre
FROM Personal

Habe ich oben in meiner Beispieldb noch eingebaut.

Ich verwende in meinem Vorschlag nix mit Modulo, mit der Verknüpfung über die Jahre braucht es das nicht.
Gruß Klaus

Hondo

#23
Welches Bild?
Sieh mal mein Anhang, das ist die Abfrage aus #18 unterer Codeblock

Aber deine Lösung ist natürlich viel besser und übersichtlicher.
Gruß Andreas

MzKlMu

@Andreas
Sorry, ist schon spät, ich hatte da 9 gesehen, ist aber 6.

Und wie gesagt, meine Formel sieht etwas anders aus (siehe #22 und mein Beispiel in #17)
Modulo braucht es da auch nicht.
Gruß Klaus

Hondo

Deine Abfrage berücktsichtigt die ausgeschiedenen noch nicht.
Die Frage die sich jetzt noch stellt ist wie genau hier abgegrenzt werden soll. Tagesgenau, Monatsgenau oder nur Jahreszahl genau? Ich trete am 10.12.1995 ein, dann hab ich am 12.01.2020 aber eigentlich erst 24 Dienstjahre voll, und keine 25.
Ehrung müsste eigentlich im Folgejahr kommen.

MzKlMu

Hallo,
Die Ausgeschiedenen ist ja nur die Whereklausel, in der Beispiel DB ist das drin.
Zu der Sache mit der Abgrenzung müsste er sich noch äußern.
Gruß Klaus

mad

Hallo Zusammen,

ich bin begeistert von euch und möchte mich schon mal recht herzlich Danke sagen.
Ich kann mir das aber alles erst heute Abend ansehen da ich dienstl. Unterwegs bin.

Zur Abgrenzung: Es reicht die Abgrenzung auf Jahre, denn die Ehrung finden immer im November statt. Und wegen einem Monat machen wir da nicht rum, wir sind ja schließlich Freiwillige.

Und welche Kameraden möchte ich gerne sehen:
25Jahre Mod 40>=25
40Jahre Mod 45>=40
50Jahre Mod 55>=50

Gruss
mad

mad

#28
Noch ein kleiner Nachtrag, ich möchte die auswerten die zur Ehrung anstehen, nicht wer welche Ehrung hat.
Diese Abfrage gibt es bereits.

Und es sollte sich nur auf die Ehrungen aus der Tabelle "tblEhrungTitel":
"EhrungTitelID" = 47 (FW-Ehrenzeichen für 25 Jahre)
"EhrungTitelID" = 48 (FW-Ehrenzeichen für 40 Jahre)
"EhrungTitelID" = 49 (FW-Ehrenzeichen für 50 Jahre)
beziehen. Also auf die, die im aktuellen Jahre die Dienstzeit 25,40 od. 50 erreicht haben.

Idealerweise gibt es auch für jede Dienstzeit 25,40 od. 50 eine eigene Spalte in der Abfrage, ähnlich dem Bild im Anhang.
Und meine ursprungsabfrage wie unter #11
ZitatNun werden mir aber in der Spalte 40Jahre noch zwei Kollegen (Name66 u. Name86) angezeigt die die Ehrung für 40 Jahre bereits erhalten haben. Der Rest paßt.
Bei den beiden Kollegen werden auch zwei Zeilen angezeigt, wobei das Feld in der Spalte 25Jahre leer ist.

Gruss
mad

mad

Hallo Klaus und Andreas,

ich habe mir nun mal eure Lösungsansätze angesehen.
@Klaus,
bei deinem Ansatz werden erstmal alle gezeigt "WerHatWas", das ist aber nicht das was ich auswerten möchte. Müsste ich diese Abfrage nochmals mit einer anderen kombinieren?
@Andreas,
bei Deinem Ansatz kommen leider nur bedingt die gewünschten Kameraden die ich auswerten möchte.

Ich habe mich auch mal weiter versucht. Jetzt wird zumindestens jeder Name nur einmal eingeblendet.
Ader es werden immer noch Kameraden angezeigt die eigentlich nicht angezeigt werden sollten.
Und Zwar Name66, Name86 und einen weiteren Kollegen habe ich noch ausgemacht, nämlich Name160.

Ich versuchte mit "EhrungTitelID" und "StatusRegID_E" die ausgezeichneten Kameraden auszugrenzen, klappt aber in der Spalte "40Jahre" noch nicht. Wie gesagt, handelt es sich um die drei Kollegen die eigentlich nicht angezeigt werden sollten.
Zur erklärung was es mit "[StatusRegID_E]=2" aufsich hat. 2 bedeutet das der Kamerad die Ehrung erhalten hat. 1 bedeutet das der Kamerad zu Ehrung angemeldet ist und 3 bedeutet das er vorgeschlagen ist. Also solange er den Staus 1 oder 3 hat soll er immer noch angezeigt werden.
Wie bekomme ich den Ausschluß hin, oder bin ich total auf dem Holzweg.

Hier mein aktueller Code zur Abfrage:
SELECT DISTINCT Personal.PID, Personal.Namekenn, Personal.NameP, IIf([EhrungTitelID]=47 And [StatusRegID_E]=2,Null,IIf(Nz(Year([ErsAustrittFW1])-Year([EintrittFW1])+Year(Now())-Year([ErsEintrittFW2]),0) Mod 40>=25,Year([ErsAustrittFW1])-Year([EintrittFW1])+Year(Now())-Year([ErsEintrittFW2]))) AS 25Jahre, IIf([EhrungTitelID]=47 And [StatusRegID_E]=2 And [EhrungTitelID]=48 And [StatusRegID_E]=2,Null,IIf(Nz(Year([ErsAustrittFW1])-Year([EintrittFW1])+Year(Now())-Year([ErsEintrittFW2]),0) Mod 45>=40,Year([ErsAustrittFW1])-Year([EintrittFW1])+Year(Now())-Year([ErsEintrittFW2]))) AS 40Jahre, IIf([EhrungTitelID]=47 And [StatusRegID_E]=2 And [EhrungTitelID]=48 And [StatusRegID_E]=2 And [EhrungTitelID]=49 And [StatusRegID_E]=2,Null,IIf(Nz(Year([ErsAustrittFW1])-Year([EintrittFW1])+Year(Now())-Year([ErsEintrittFW2]),0) Mod 55>=50,Year([ErsAustrittFW1])-Year([EintrittFW1])+Year(Now())-Year([ErsEintrittFW2]))) AS 50Jahre, Personal.EintrittFW1, IIf([AustrittFW1] Is Null,Date()) AS ErsAustrittFW1, IIf([EintrittFW2] Is Null,Date()) AS ErsEintrittFW2, Personal.AusgeschiedDatum, tblRegEhrung2540.StatusRegID_E
FROM tblEhrungTitel RIGHT JOIN (tblEhrung2540 RIGHT JOIN (Personal LEFT JOIN tblRegEhrung2540 ON Personal.PID = tblRegEhrung2540.PID_E) ON tblEhrung2540.EhrungID = tblRegEhrung2540.EhrungID_E) ON tblEhrungTitel.EhrungTitelID = tblEhrung2540.EhrungTitelID_E
WHERE (((Personal.AusgeschiedDatum) Is Null));


Habe aber zur besseren Darstellen auch meinen aktuellen Versuch der DB mit eingestellt.


Gruss
mad