Top-Themen

Aktuelle Themen (A bis Z)

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

Mitglied: edvKrisch

edvKrisch (Level 1) - Jetzt verbinden

12.11.2008, aktualisiert 13.11.2008, 4948 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 ..
Ähnliche Inhalte
Datenbanken
SQL: 2 Zeilen zu einer zusammenfassen
gelöst Frage von philbo20Datenbanken11 Kommentare

Hallo zusammen, ich habe eine SQL-Server 2008 DB, wo ich eine Tabelle mit drei Spalten habe: Name, Berufswunsch1, Berufswunsch2 ...

VB for Applications

Zeilen zusammenfassen wenn eine der Zellen gleich ist

Frage von Benni5555VB for Applications2 Kommentare

Hallo zusammen, ich suche nach einer Lösung für mein Problem und bin "fast" fündig geworden. Mein Problem sieht wie ...

VB for Applications

VBA Excel Dateien zusammenfassen

Frage von cberndtVB for Applications3 Kommentare

Hi Leute. Ich bin dabei einen Ordner mit Excellisten zusammenzufassen. Im Ordner sind gut 600 einzelne Excel Dateien die ...

Entwicklung

Daten zusammenfassen, dann bearbeiten und wieder trennen

gelöst Frage von Max16hrEntwicklung8 Kommentare

Hallo allerseits! Ich bin hier in folgender Situation: Es sollen einige hundert Skripte ausgeführt werden. Jedes dieser Skripte benötigt ...

Neue Wissensbeiträge
Sicherheit

MikroTik-Router patchen, Schwachstelle wird ausgenutzt

Information von kgborn vor 11 StundenSicherheit

Am 23. April 2018 wurde von Mikrotik ein Security Advisory herausgegeben, welches auf eine Schwachstelle im RouterOS hinwies. Mikrotik ...

Windows 10

Microcode-Updates KB4090007, KB4091663, KB4091664, KB4091666 für Windows 10

Information von kgborn vor 17 StundenWindows 101 Kommentar

Kurze Information für Administratoren von Windows 10-Systemen, die mit neueren Intel CPUs laufen. Microsoft hat zum 23. April 2018 ...

iOS
Updates für Iphone und Co
Information von sabines vor 21 StundeniOS

Gestern abend ist iOS 11.3.1 erschienen, ein kleineres Update, dass einige Lücken schließt und "Lahmlegen" nach einem Display Tausch ...

Windows 7

Windows 7 - Server 2008 R2: Exploit für Total Meltdown verfügbar

Information von kgborn vor 2 TagenWindows 7

Kleine Information für Administratoren, die für die Updates von Windows 7 SP1 und Windows Server 2008 R2 SP1 verantwortlich ...

Heiß diskutierte Inhalte
Batch & Shell
Powershell: Im AD nach Rechnern mit bestimmten IP-Adressen suchen
gelöst Frage von Raven42Batch & Shell36 Kommentare

Hallo zusammen, ich suche nach einer Möglichkeit nach Computern im AD zu suchen , deren IP-Adresse mit 10.11.12. beginnt. ...

C und C++
Frage1 C Programmierung-Makefile Frage2 PHP-Programmierung HTTP-Fehler 404
Frage von KatalinaC und C++34 Kommentare

Hallo, ich habe 2 Fragen, die nichts miteinander zu tun haben aber mit denen ich mich gerade beschäftige: 1. ...

LAN, WAN, Wireless
Watchguard T15 VPN Einrichtung
gelöst Frage von thomasjayLAN, WAN, Wireless25 Kommentare

Hallo zusammen, wir möchten gerne über unsere Watchguard T15 einen VPN-Tunnel (Mobile VPN with IPSec) einrichten! Als Client nutzen ...

Windows Server
Alten DC entfernen
Frage von smartinoWindows Server24 Kommentare

Hallo zusammen, ich habe hier eine Umgebung übernommen und erstmal einen DCDIAG gemacht. Dabei fällt auf, daß eine ganze ...