Dieser Beitrag ist schon älter. Bitte vergewissern Sie sich, dass die Rahmenbedingungen oder der enthaltene Lösungsvorschlag noch dem aktuellen Stand der Technik entspricht.

Einzelne Monatsdateien in einer Jahresauswertungstabelle zusammenfassen

Mitglied: edvKrisch
Hallo Zusammen,

ich bin gerade am verzweifeln. Ich habe in einer Access-Datenbank zwölf Tabellen, für jeden Monat eine einzelne. In den Tabellen stehen Mitarbeiter. Es kann passieren das in einem Monat ein Mitarbeiter wegfällt bzw. das ein neuer Mitarbeiter hinzu kommt. In der Jahresauswertungstabelle sollen alle Mitarbeiter aufgelistet werden die während des Jahres in irgendeiner Monatstabelle vorhanden waren. Es sollten allerdings keine Duplikate in dieser Tabelle sein.

Zum Testen habe ich bereits mittels UNION zwei Tabellen miteinander verknüpft nur hab ich keine Ahnung wie ich die Duplikate verhindere.

Syntax: SELECT PersNr FROM 012002 UNION ALL SELECT PersNr FROM 022002;

Benutzt wird übrigens Office 2003

Hoffe mir kann jemand helfen

Gruß

Content-Key: 101678

Url: https://administrator.de/contentid/101678

Ausgedruckt am: 04.08.2021 um 02:08 Uhr

Mitglied: petenicker
petenicker 12.11.2008 um 21:23:21 Uhr
Goto Top
Hallo,

mit der Verknüpfung von zwei oder mehreren Tabellen wirst du nicht glücklich werden. Die einzige Möglichkeit, die ich für dich sehe ist eine Jahrestabelle zu erstellen, die dieselben Felder beinhaltet wie die Monatstabellen. In der Jahrestabelle setzt du einen eindeutigen Index auf die Personalnummer. Dann fügst du alle Datensätze aus den jeweilgen Monatstabellen in die Jahrestabelle ein. Duplikate werden aufgrund des Index nicht übernommen.

Ich befürchte allerdings, dass es nicht nur um die Namen der Mitarbeiter geht, sondern dass eine Art Statistik erstellt werden soll. Gehe ich da Recht mit meiner Annahme? Dafür wäre der Datenbankaufbau mit zwölf Einzeltabellen etwas "unglücklich".

Gruß
Mitglied: Biber
Biber 12.11.2008 um 21:44:07 Uhr
Goto Top
Moin edvKrisch,

willkommen im Forum.

Mir würden mehrere Lösungsstrategien einfallen.

Variante a) Am besten an einem Beispiel.

Wenn drei (Bei-)Spieltabellen existieren
  • namens Jan2008, Feb2008, Mar2008
  • mit jeweils nur den Feldern PersNr und Name
  • und je drei Beispielsätzen
dann würde bei diesem Select
herauskommen:
Persnr 10/Fritz war nur im März in einer der Tabellen, Persnr 14/Maria nur im Feb....usw.
Sollte lesbar sein.

Wenn du alle PersNrn nur einmalig "sehen" willst, dann musst Du alle anderen Daten "aggregieren".
Also z.B.
Ergebnis:
[ Soll nur das Prinzip zeigen, ich weiss, dass "karl" nicht durchgängig von Jan-März da war *g]

Wichtig ist im zweiten Statement das GROUP BY auf das Kriterium, das Du nur einmalig (in einer Zeile) sehen willst.

Variante b) die ich persönlich vorziehen würde.

Schick eine PN an den Moderator des Forumsbereichs "Datenbanken".
Der betreibt nämlich hauptberuflich einen florierenden Baseballschläger-Verleih.
Nimm seine Dienste in Anspruch und mach einen Termin mit dem Kasper, der Euch diese "Datenbank" modelliert hat.

Und arbeite ab nächstes Jahr mit einer redesignten Tabellenstruktur.

Grüße
Biber
[Edit] Okay, petenicker hat meine Variante b) schonender rübergebracht, aber auch ich hab mich zurückgehalten...[/Edit]
Mitglied: BigWumpus
BigWumpus 12.11.2008 um 22:41:46 Uhr
Goto Top
Ja !!

b) !!!!

Wer diese Datenbankstruktur entwickelt hat, hat Euch einen Bärendienst erwiesen.
Wahrscheinlich hatte er einfach keine Ahnung und hat seinen Schreibblock mal in Access umgesetzt. Ist ja auch so hübsc einfach.

Eine Datenbasis (Tabelle) für ALLE Jahre und Mitarbeiter !!!
Aus der holst Du mittels Abfragen alles raus.
Mitglied: edvKrisch
edvKrisch 13.11.2008 um 13:33:26 Uhr
Goto Top
Hallo Biber,

erstmal vielen Dank für deinen Vorschlag der funktioniert einwandfrei.

Habe deine Variante B ebenfalls zur Kenntnis genommen und aus den einzelnen Tabellen eine
Jahrestabelle gemacht. Nur steh ich jetzt wieder vor dem Problem wie ich eine Abfrage gestalte das ein Mitarbeiter nicht doppelt enthalten ist. Wenn ich ein einfaches GROUP BY auf die Personalnummer mache heißt es immer diese gehört nicht der Aggregatsfunktion hinzu.

Die Tabelle besteht aus 22 Spalten und mein eindeutiger Index wäre die Personalnummer. Wäre schön wenn du mir nochmal behilflich sein könntest.

Gruß
Mitglied: BigWumpus
BigWumpus 13.11.2008 um 14:04:16 Uhr
Goto Top
In dem ursprünglichen Post gab es Tabellen, in denen Mitarbeiter je Monat aufgeführt waren.

Ich tippe mal auf den Grund, daß man einfach für jeden Monat speichert, wer arbeitete (Personalnummer).
Das wäre für mich genau 1 Spalte: Mitarbeiter

Dann führt man diese 12 Tabellen in eine Tabelle zusammen, so daß man Mitarbeiter und Monat speichert.
Das wären dann 2 Spalten: Mitarbeiter; Monat

Die Abfrage wäre dann einfach eine GROUP-BY-Funktion auf den Mitarbeiter.

Um das alles noch zu toppen, führt man eine 3. Spalte ein in der man das Jahr speichert.


Es entzieht sich allerdings meiner Vorstellungskraft, was das alles soll.
Mitglied: Biber
Biber 13.11.2008 um 14:13:48 Uhr
Goto Top
Moin edvKrisch,

wenn wir da weiterkommen wollen, dann wäre es sinnvoll, wenn Du mal
  • die Struktur oder zumindest die später auswertungsrelevanten Felder der "Jahrestabelle" öffentlich machst
  • und eine Skizze des Auswertung/des Reports, den Du nun am Ende erhalten willst.

Ich gerate ohnehin immer schnell ins weitschweifige Faseln - ein paar feste Punkte im Raum könnten mich davon abhalten.

Grüße
Biber
Mitglied: edvKrisch
edvKrisch 13.11.2008 um 14:53:52 Uhr
Goto Top
Tach Zusammen,

ich versuche mal Licht ins Dunkle zu bringen....

Also ich hab aus den zwölf Monatsdateien eine Gesamttabelle gemacht mit folgendem Aufbau:

AK UN FIL KST PERSNR NAME STRASSE HAUSNR PLZ ORT .....

Die beinhaltet jetzt einen Mitarbeiter evtl. 12mal. Deshalb würde ich gerne darauf jetzt eine Abfrage starten. Mache ich jetzt eine Abfrage SELECT PERSNR FROM Jahr2002 GROUP BY PERSNR hab ich die gewünschte richtige Ansicht aber halt nur die Spalte PERSNR. Deshalb die Frage wie bekomm ich die anderen Spalten hinzu. Irgendwie steh ich grad aufm Schlauch...

Gruß
edvKrisch
Mitglied: petenicker
petenicker 13.11.2008 um 15:28:47 Uhr
Goto Top
Zitat von @edvKrisch:
Tach Zusammen,

ich versuche mal Licht ins Dunkle zu bringen....

Also ich hab aus den zwölf Monatsdateien eine Gesamttabelle
gemacht mit folgendem Aufbau:

AK UN FIL KST PERSNR NAME STRASSE HAUSNR PLZ ORT .....

Die beinhaltet jetzt einen Mitarbeiter evtl. 12mal. Deshalb
würde ich gerne darauf jetzt eine Abfrage starten. Mache ich
jetzt eine Abfrage SELECT PERSNR FROM Jahr2002 GROUP BY PERSNR hab ich
die gewünschte richtige Ansicht aber halt nur die Spalte PERSNR.
Deshalb die Frage wie bekomm ich die anderen Spalten hinzu. Irgendwie
steh ich grad aufm Schlauch...

Gruß
edvKrisch
Dass du nur die Spalte PERSNR bekommst ist klar. Du hast in deiner SELECT Anweisung nur diese Spalte angegeben. Willst du zusätzlich noch den Namen wäre die Syntax
Solltest du alle Spalten sehen wollen:

Mitglied: edvKrisch
edvKrisch 13.11.2008 um 15:34:06 Uhr
Goto Top
Genau da ist ja mein Problem, mach ich:

SELECT PERSNR, NAME FROM Jahr2002 GROUP BY PERSNR

Fehler das Name nicht zu meiner Aggregatsfunktion dazugehört.

SELECT * FROM Jahr2002 GROUP BY PERSNR

Fehler mit "*" ausgewählte Felder können nicht gruppiert werden


Gruß
edvKrisch
Mitglied: petenicker
petenicker 13.11.2008 um 15:41:46 Uhr
Goto Top
Sorry, mein Fehler!

Korrekt muss es heißen:

Mitglied: Biber
Biber 13.11.2008 um 17:58:00 Uhr
Goto Top
Hmm, edvKrisch,

so kommen wir nicht voran.
Das Wesen einer Datenbank ist nicht, dass alle Daten in einer flachgeklopften Tabelle vorliegen müssen, damit man/frau die Eins-zu-Eins auf den Drucker schicken kann.
Es muss doch auch bei Dir identifizierende Schlüssel geben, und wenn "PERSNR" ein eindeutiger Schlüssel ist, an dem Name, Vorname, Hausnr und Sternzeichen des Mitarbeiters hängen, dann ist das eine eigene Tabelle.
Ebenso gibt es bestimmt eine Tabelle mit allen Abteilungen, eine mit allen Kostenstellen, meinetwegen auch eine Tabelle mit 12 Sätzen, um alle Monatsnamen im Klartext zu hinterlegen.
Und erst dann kommen wir auf die Bewegungsdaten (die Stunden oder AK pro Monat und Projekt und Kostenstelle).

Bitte erzähl doch noch mal für uns Unwissende:
  • es gibt PERSNRn mit den üblichen Attributen, das hab ich verstanden.
  • und was wird jetzt je PersNr gesammelt? Die Anzahl Arbeitstage je Monat? Oder die Zuordnung eines MA zu einer Kostenstelle?
  • was ist denn in der jetzigen Jahrestabelle der eindeutige Schlüssel, also die Kombination, die nicht doppelt auftreten darf?
  • und WTF ist nun das Ergebnis, dass Du als "Jahresauswertung" erhalten willst (drei Beispielzeilen bitte)?

Grüße
Biber
Mitglied: BigWumpus
BigWumpus 13.11.2008 um 21:13:01 Uhr
Goto Top
Sowas habe ich wieder befürchtet.

Du must die Datenbank "normalisieren" !

Es gibt eine Tabelle "Personal", in der steht jedes Personal genau einmal drin. Jedes Personal hat eine Personalnummer, die ist eindeutig, also ohne Duplikate.

Dann gibt es diese Tabelle "Anwesenheit", darin steht JAHR, MONAT, PERSONALNUMMER.
Mehr braucht es nicht.

Abfrage auf diese Tabelle für ein bestimmtes [Jahr], gruppiert nach Personalnummer ergibt die Liste der Personalnummern, die Du dann in der nächsten Abfrage mit den Daten aus der Tabelle "Personal" verknüpfen kannst.

Ist aber eigentlich sinnlos, das hier zu erklären, weil das in jedem Datenbank-Beispiel auch so erläutert wird.

Normalisieren !
Heiß diskutierte Beiträge
question
Backup-Konzept für HeimgebrauchmossoxVor 1 TagFrageBackup13 Kommentare

Guten Tag zusammen, ich bin mir nicht sicher, ob ich das richtige Unterforum gewählt habe, denn meine Frage berührt auch den Bereich Hardware und Netzwerke. ...

question
Günstiges Open-Source NAS für HeimgebrauchpanguuVor 1 TagFrageSAN, NAS, DAS10 Kommentare

Hallo, mit NAS-Systemen hatte ich bisher gearbeitet: Synology, QNAP, Buffalo, etc. Dabei kommen proprietäre Betriebssysteme zum Einsatz, die sich natürlich von Hersteller zu Hersteller unterscheiden ...

question
Domains, die mir gehören gelöst IT-EinsteigerVor 1 TagFrageInternet Domänen5 Kommentare

Hi, Ich habe verschiedene Domain, bei verschiedenen Hostern. Da ich hier und da nur eine Domain gekauft habe, um den Hoster zu testen, habe ich ...

question
Ipv6 RouterliodiceVor 1 TagFrageDSL, VDSL10 Kommentare

Hallo zusammen, ich hoffe ihr könnt mir weiterhelfen, ich benötigen einen ADSL Router (Kabelgebundenen) der IPv4 und IPv6 kann, also Dual Stack (DHCP Extern und ...

question
PC geht ohne Vorwarnung aus und fährt wieder hochWasserstrahlbiegezangeVor 1 TagFrageHardware14 Kommentare

Hi, vor einiger Zeit hat mein PC angefangen sich merkwürdig zu verhalten. Er stürzte einfach ab, ging dabei teilweise ohne Vorwarnung aus, und fuhr wieder ...

question
Server 2019 std. auf deutsch umstellenBender999Vor 11 StundenFrageWindows Server19 Kommentare

Hallo, kann mir einer erklären wie um alles in der Welt ich meinen Server 2019 std. auf deutsch umstellen kann? ...

question
Prozess bzw. Programm zu Verbindung auf IP herausfinden gelöst dcmindenVor 1 TagFrageWindows Netzwerk8 Kommentare

Wir bekommen bei diversen Kunden regelmäßig (alle 6 - 8 Tage) Alarmmeldungen von der Firewall zu einer geblockten Verbindung zu 68.183.140.225 Port 443. Jetzt möchten ...

question
Textdatei anhand xy-Koordinaten auslesen gelöst LeaX55Vor 1 TagFrageBatch & Shell11 Kommentare

Hallo Gemeinde, gibt es in Powershell eine Möglichkeit ein Text/Zahl aus einer Textdatei auszulesen anhand xy-Koordinaten? Als Beispiel habe ich eine Textdatei, aus der ich ...