Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

Einzelne Monatsdateien in einer Jahresauswertungstabelle zusammenfassen

Frage Microsoft Microsoft Office

Mitglied: edvKrisch

edvKrisch (Level 1) - Jetzt verbinden

12.11.2008, aktualisiert 13.11.2008, 4902 Aufrufe, 12 Kommentare

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ß
Mitglied: petenicker
12.11.2008 um 21:23 Uhr
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ß
Bitte warten ..
Mitglied: Biber
12.11.2008 um 21:44 Uhr
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
01.
Select Persnr , name, quelle from ( 
02.
SELECT '01 Jan' as Quelle, Jan2008.Persnr as Persnr, Jan2008.name as name FROM Jan2008 
03.
UNION 
04.
SELECT '02 Feb' , Feb2008.Persnr, Feb2008.name  FROM Feb2008 
05.
UNION 
06.
SELECT '03 Mar', Mar2008.Persnr , mar2008.name FROM Mar2008 
07.
08.
 
09.
order by persnr, quelle 
10.
;
herauskommen:
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
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.
01.
Select Persnr , name,min(quelle) as [Von:], max(quelle) as [Bis:] from ( 
02.
SELECT '01 Jan' as Quelle, Jan2008.Persnr as Persnr, Jan2008.name as name FROM Jan2008 
03.
UNION 
04.
SELECT '02 Feb' , Feb2008.Persnr, Feb2008.name  FROM Feb2008 
05.
UNION 
06.
SELECT '03 Mar', Mar2008.Persnr , mar2008.name FROM Mar2008 
07.
08.
GROUP BY persnr, name 
09.
order by persnr 
10.
;
Ergebnis:
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
[ 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]
Bitte warten ..
Mitglied: BigWumpus
12.11.2008 um 22:41 Uhr
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.
Bitte warten ..
Mitglied: edvKrisch
13.11.2008 um 13:33 Uhr
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ß
Bitte warten ..
Mitglied: BigWumpus
13.11.2008 um 14:04 Uhr
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.
Bitte warten ..
Mitglied: Biber
13.11.2008 um 14:13 Uhr
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
Bitte warten ..
Mitglied: edvKrisch
13.11.2008 um 14:53 Uhr
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
Bitte warten ..
Mitglied: petenicker
13.11.2008 um 15:28 Uhr
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
01.
SELECT PERSNR, NAME FROM Jahr2002 GROUP BY PERSNR
Solltest du alle Spalten sehen wollen:
01.
SELECT * FROM Jahr2002 GROUP BY PERSNR
Bitte warten ..
Mitglied: edvKrisch
13.11.2008 um 15:34 Uhr
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
Bitte warten ..
Mitglied: petenicker
13.11.2008 um 15:41 Uhr
Sorry, mein Fehler!

Korrekt muss es heißen:
01.
SELECT PERSNR, NAME FROM Jahr2002 GROUP BY PERSNR, NAME
Bitte warten ..
Mitglied: Biber
13.11.2008 um 17:58 Uhr
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
Bitte warten ..
Mitglied: BigWumpus
13.11.2008 um 21:13 Uhr
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 !
Bitte warten ..
Neuester Wissensbeitrag
Humor (lol)

Linkliste für Adventskalender

(3)

Information von nikoatit zum Thema Humor (lol) ...

Heiß diskutierte Inhalte
Router & Routing
gelöst Ipv4 mieten (22)

Frage von homermg zum Thema Router & Routing ...

Exchange Server
gelöst Exchange 2010 Berechtigungen wiederherstellen (20)

Frage von semperf1delis zum Thema Exchange Server ...

Windows Server
DHCP Server switchen (20)

Frage von M.Marz zum Thema Windows Server ...

Hardware
gelöst Negative Erfahrungen LAN-Karten (19)

Frage von MegaGiga zum Thema Hardware ...