Neuigkeiten:

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

Mobiles Hauptmenü

Anzahl Mitglieder zu einem bestimmten Zeitpunkt

Begonnen von Profitor, September 26, 2010, 19:15:17

⏪ vorheriges - nächstes ⏩

Profitor

Hallo,
ich habe eine Mitgliedertabelle mit Mitgliedsnummer, Name, Sparte, Eintrittsdatum, Austrittsdatum, Geschlecht, Geburtsdatum, usw.
Mitglieder können in mehr als einer Sparte Mitglied sein.

Ich möchte nun zu einem Stichtag die Anzahl der Mitglieder ermitteln. Schön wäre es noch, wenn ich Geschecht, Erwachsen / Jugendlich / Kind trennen kann.
Eine umständliche Lösung bekomme ich vielleicht auch hin, aber ich habe die Hoffnung hier eine bessere Lösung zu bekommen und dabei noch etwas zu lernen.

Vielen Dank im Vorraus
Manfred

database

#1
Hallo,

das wird ein wenig schwierig werden, wenn das wirklich alles in einer einzigen Tabelle steht.
Zitat
Mitglieder können in mehr als einer Sparte Mitglied sein.
...denn diese Aussage bedeutet, dass du ein Mitglied 3 mal in der Tabelle stehen hast, wenn es in 3 Sparten Mitglied ist.
Wenn nun dabei auch noch der Umstand eintritt, dass solche Mitglieder unterschiedliche Mitgliedsnummern haben wird dein Vorhaben ziemlich problematisch.

ZitatSchön wäre es noch, wenn ich Geschecht, Erwachsen / Jugendlich / Kind trennen kann
Ist machbar, wenn bekannt ist wo die Altersgrenzen liegen bzw. wenn die Mitglieder in solchen Kategorien geführt werden (würden)

Zitat...und dabei noch etwas zu lernen
Das wäre - wenn obige Aussagen zutreffen - erst mal das Datenmodell richtig zu stellen.

Ohne jetzt was großartig auszuprobieren...


SELECT Count(Mitgliedsnummer) AS X
FROM tblMitglieder
GROUP BY tblMitglieder.Geschlecht, tblMitglieder.Sparte
HAVING tblMitglieder.Geschlecht=1 AND tblMitglieder.Sparte=1;


würde z.B. alle Mitglieder zählen, die männlich sind (wenn das Geschlecht m als 1 und w als 2 in der DB gespeichert werden) und sich in der Sparte mit dem Schlüssel 1 befinden.
Die Sparte wird hierbei als Fremdschlüssel der Tabelle 'tblSparten' in der Tabelle tblMitglieder geführt.

Die Aufdröselung in Erwachsene, Jugendliche und Kinder erfolgt sinngemäß über die Geburtsdaten - wenn hierzu keine Kategorien bekannt sind.
Allerdings werden dieses dann 3 verschiedene Abfragen bzw. wird die SQL der gewünscheten Datenansicht dynamisch erstellt (z.B durch Bekanntgabe der gewünschten Einschränkungen per Formularfelder oder aber auch durch Parameterabfrage).

Grüße

Profitor

Hallo,
vielen Dank für die schnelle Antwort.
ich glaube, dass es für mich am einfachsten ist, wenn ich es Schritt für Schritt mache.
Was ich WIRKLICH brauche ist ein Mitgliederstand zu einem wählbaren Zeitpunkt, dann kommen die Wünsche (Feinheiten).

Ich habe noch einmal nachgeschaut. In der Tabelle ist jedes Mitglied mit einer Nummer nur einmal vorhanden. Die Sparten sind in einer separaten Tabelle. Sie werden über einen Index verbunden.
Wie bekomme ich es hin, dass die Ein- und Austritte berücksichtigt werden?

Gruß
Manfred

database

Hallo,

ZitatWie bekomme ich es hin, dass die Ein- und Austritte berücksichtigt werden

Die müssen in der WHERE Klausel der Abfrage bzw. im HAVING Teil bei Gruppierung untergebracht werden.
Das Austrittsdatum muss dann höher oder gleich dem oberen abgefragten Zeitrahmen bzw. des Stichtagdatums liegen oder NULL sein.
Analog muss das Eintrittsdatum niedriger oder gleich der unteren Zeitgrenze bzw. des Stichtagdatums sein

ZitatIn der Tabelle ist jedes Mitglied mit einer Nummer nur einmal vorhanden. Die Sparten sind in einer separaten Tabelle
Nachdem Mitglieder in mehreren Sparten Mitglied sein können sollte es da auch eine Zwischentabelle geben, in der
mindestens die Mitgliedsnummer und die Spartennummer gespeichert sind. Also zur Auflösung der n:m Beziehung dient.

Wenn z.B. das Mitglied Fritz in 3 Sparten Mitglied ist und diese Zwischentabelle nicht vorhanden ist, würde in einer
Zählung ohne Spartenberücksichtigung Fritz theoretisch 3x gezählt werden!

HTH

Peter