Einzelne Monatsdateien in einer Jahresauswertungstabelle zusammenfassen
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ß
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ß
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 101678
Url: https://administrator.de/contentid/101678
Ausgedruckt am: 22.11.2024 um 17:11 Uhr
12 Kommentare
Neuester Kommentar
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ß
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ß
Moin edvKrisch,
willkommen im Forum.
Mir würden mehrere Lösungsstrategien einfallen.
Variante a) Am besten an einem Beispiel.
Wenn drei (Bei-)Spieltabellen existieren
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]
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
Select Persnr , name, quelle from (
SELECT '01 Jan' as Quelle, Jan2008.Persnr as Persnr, Jan2008.name as name FROM Jan2008
UNION
SELECT '02 Feb' , Feb2008.Persnr, Feb2008.name FROM Feb2008
UNION
SELECT '03 Mar', Mar2008.Persnr , mar2008.name FROM Mar2008
)
order by persnr, quelle
;
Persnr name quelle
10 Fritz 03 Mar
11 Hans 01 Jan
11 Hans 02 Feb
12 Biber 01 Jan
12 Biber 02 Feb
12 Biber 03 Mar
13 Karl 01 Jan
13 Karl 03 Mar
14 Maria 02 Feb
Sollte lesbar sein.
Wenn du alle PersNrn nur einmalig "sehen" willst, dann musst Du alle anderen Daten "aggregieren".
Also z.B.
Select Persnr , name,min(quelle) as [Von:], max(quelle) as [Bis:] from (
SELECT '01 Jan' as Quelle, Jan2008.Persnr as Persnr, Jan2008.name as name FROM Jan2008
UNION
SELECT '02 Feb' , Feb2008.Persnr, Feb2008.name FROM Feb2008
UNION
SELECT '03 Mar', Mar2008.Persnr , mar2008.name FROM Mar2008
)
GROUP BY persnr, name
order by persnr
;
Persnr name Von: Bis:
10 Fritz 03 Mar 03 Mar
11 Hans 01 Jan 02 Feb
12 Biber 01 Jan 03 Mar
13 Karl 01 Jan 03 Mar
14 Maria 02 Feb 02 Feb
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]
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.
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.
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.
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.
Moin edvKrisch,
wenn wir da weiterkommen wollen, dann wäre es sinnvoll, wenn Du mal
Ich gerate ohnehin immer schnell ins weitschweifige Faseln - ein paar feste Punkte im Raum könnten mich davon abhalten.
Grüße
Biber
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
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 SyntaxTach 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
SELECT PERSNR, NAME FROM Jahr2002 GROUP BY PERSNR
SELECT * FROM Jahr2002 GROUP BY PERSNR
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:
Grüße
Biber
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
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 !
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 !