MS-Office-Forum

Zurück   MS-Office-Forum > Microsoft Access & Datenbanken > Microsoft Access
Registrieren Forum Hilfe Alle Foren als gelesen markieren

Banner und Co.

Antworten
Ads
Themen-Optionen Ansicht
Alt 18.05.2018, 16:54   #1
Tuono63
Neuer Benutzer
Neuer Benutzer
Standard Acc2016 - Abfrage mit mehreren Kriterien

Hallo Community!

Irgendwie verstehe ich es nicht. Ich versuche im Rahmen einer Abwesenheit einen Bericht über alle Mitarbeiter zu erstellen.

Dazu habe ich eine Abfrage entworfen, die mir sagen soll, welcher Mitarbeiter wieviele Tage Urlaub hatte und wieviel Tage Krank war.

Eigentlich einfach, aber ich kapiers nicht, da mir bei der Abfrage nur die angezeigt werden, die sowohl Urlaub hatten und auch krank waren. Fehlt eine Kriterium, wird der Datensatz nicht angezeigt. Altes Thema...hab mir schon die Finger wund gegoogelt! Viel gefunden, aber nichts so richtig verstanden...

Ich habe eine Beispieldatenbank (Urlaub.zip) angehängt. Hier sieht man, das Herr Schulz nicht auftaucht, weil Er noch nicht krank war...

Kann mir jemand auf die Sprünge helfen?

Danke im Voraus!

Tuono
Angehängte Dateien
Dateityp: zip Urlaub.zip (27,1 KB, 4x aufgerufen)
Tuono63 ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 18.05.2018, 17:06   #2
maikek
MOF Guru
MOF Guru
Standard

Moin,
ich kann leider dein Beispiel nicht ansehen, da ich .accdbs nicht öffnen kann ... aber ich vermute, du hast Krankheit und Urlaub in zwei verschiedenen Tabellen?
Das wäre falsch, das gehört zusammen in eine Tabelle mit einem Feld zur Kennzeichnung, in dem dann zum Beispiel eine 1 für Urlaub, eine 2 für Krankheit, eine 3 für Dienstreisen ... etc. steht.

Oder - zweite Möglichkeit - du hast eine Tabelle für die Mitarbeiter und eine wie oben beschrieben, für Urlaub, Krankheit etc., dann ist vermutlich die Beziehung in der Abfrage nicht korrekt gesetzt, du brauchst einen Left oder Right Join statt des Inner Join (Verknüpfungslinie markieren, Rechtsklick und dann "alle aus Tabelle Mitarbeiter und nur die aus ..." einstellen).

maike

__________________

Bitte dein Thema auf erledigt setzen, wenn's durch ist!
MOF Access Stammtisch in Bremen
maikek ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 18.05.2018, 17:15   #3
Tuono63
Threadstarter Threadstarter
Neuer Benutzer
Neuer Benutzer
Standard

Hallo maike,

ich habe 2 Tabellen. Eine mit den Mitarbeiternamen etc. und eine mit den Abwesenheitsgründen (Urlaub, Krankheit etc.). Darüber hinaus summiere ich die Tage der entsprechenden Abwesenheit. Ich habe aber die Tabelle mit den Abwesenheiten 2 mal in der Abfrage...kann man aber nur verstehen, wenn man die DB sieht.

Gibt es ein anderes Format welches ich dir zur Verfügung stellen könnte?

Tuono
Tuono63 ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 18.05.2018, 17:19   #4
gpswanderer
MOF Guru
MOF Guru
Standard

Hallo,
Deine Abfrage ist ja auch falsch. Das doppelte Einbinden der Tabelle Abwesenheiten ist ersatzlos überflüssig.
Die sollte so aussehen:
Code:

SELECT mitarbeiter.Persnr, ma_name, Grund, Sum(Tage) AS SummevonTage
FROM mitarbeiter INNER JOIN abwesenheit ON mitarbeiter.Persnr = abwesenheit.Persnr
Where Grund="Urlaub" Or Grund="Krankheit"
GROUP BY mitarbeiter.Persnr, ma_name, Grund
Siehe auch Bild.

PS:
Da Du schon ein ID hast, würde ich diese als Primärschlüssel nehmen und nicht die Persnr. Wenn Du Persnr als PS lässt, ist die ID überflüssig.
Angehängte Grafiken
Dateityp: jpg 0085.jpg (47,0 KB, 9x aufgerufen)

__________________

Gruß
Klaus
Office2016, Win10

Geändert von gpswanderer (18.05.2018 um 17:37 Uhr).
gpswanderer ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 18.05.2018, 18:54   #5
Tuono63
Threadstarter Threadstarter
Neuer Benutzer
Neuer Benutzer
Standard

Hallo und danke erst einmal für Eure schnellen Antworten!

Der Weg ist durchaus einfacher und plausibler. Dennoch habe ich mein Ziel, sowohl den summierten Urlaub, als auch die summierten Krankheitstage im Bericht (in einer Zeile) nicht erreicht.

Das war der Grund warum ich die 2., doppelte Tabelle hinzugenommen habe.

Was ich erreichen will ist folgendes, dass ich in einer Zeile den Mitarbeiter, die summierten Urlaubstage und die Krankheitstage abbilden kann. Und das auch wenn Urlaub oder Krankheit nicht im Datensatz (Abwesenheit) vorhanden ist.

Oder stehe ich gerade voll auf dem Schlauch???

Grüße
Tuono
Tuono63 ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 18.05.2018, 18:56   #6
Lanz Rudolf
MOF Guru
MOF Guru
Standard

Hallo
habe die Accdb -> MdB konvertiert
Angehängte Dateien
Dateityp: zip Urlaub.zip (27,1 KB, 2x aufgerufen)

__________________


Gruss
Ruedi

WICHTIG Hilfe findet man auch hier:
http://www.donkarl.com/ ;http://www.yaccess.de/ ; und natürlich MS Office Forum Ask Dr. Mof http://www.ms-office-wissen.de/askdrmof/index.php;
Umgang mit NULL ; hier downloaden
Datenrettung;http://www.access-rettung.de/info.htmMeine Doc;Meine Doc
Lanz Rudolf ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 18.05.2018, 19:14   #7
gpswanderer
MOF Guru
MOF Guru
Standard

Hallo,
ein Kreuztabellenabfrage dürfte das Problem lösen.
Code:

TRANSFORM Sum(abwesenheit.[Tage]) AS SummevonTage
SELECT abwesenheit.[Persnr], mitarbeiter.ma_name, Sum(abwesenheit.[Tage]) AS Gesamt
FROM mitarbeiter 
INNER JOIN abwesenheit ON mitarbeiter.Persnr = abwesenheit.Persnr
GROUP BY abwesenheit.[Persnr], mitarbeiter.ma_name
PIVOT abwesenheit.[Grund]
Was die Abfrage dann zeigt siehst Du im Bild.

Und meinen Hinweis zum PS (bzw. ID) solltest Du auch nicht ignorieren.
Angehängte Grafiken
Dateityp: jpg 0087.jpg (17,1 KB, 11x aufgerufen)

__________________

Gruß
Klaus
Office2016, Win10

Geändert von gpswanderer (18.05.2018 um 19:45 Uhr).
gpswanderer ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 19.05.2018, 08:02   #8
Tuono63
Threadstarter Threadstarter
Neuer Benutzer
Neuer Benutzer
Standard

Guten Morgen!

Das ist genau das was ich benötige. Ich hatte mir das Thema Kreuztabelle zwar schon mal angesehen, aber nicht wirklich beachtet.

Vielen Dank für diese Lösung, großartig!

Ein schönes Pfingstwochenende wünsche ich Allen!

Tuono

P.S. Das mit der ID werde ich natürlich berücksichtigen. Danke für den Hinweis.
Tuono63 ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 19.05.2018, 08:41   #9
Nouba
MOF Guru
MOF Guru
Standard

... und willst Du dann auch Mitarbeiter sehen, die noch keine Abwesenheit hatten, sollte in der Abfrage ein Outer Join verwendet werden.
Code:

TRANSFORM CLng( Nz( Sum( Tage ), 0 ) ) AS X
SELECT m.Persnr,
       Min( m.ma_name ) AS ma_name
FROM   mitarbeiter AS m
       LEFT JOIN abwesenheit AS a
              ON m.Persnr = a.Persnr
GROUP  BY m.Persnr
PIVOT  a.Grund In ( 'Urlaub', 'Krankheit' );
Nouba ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 19.05.2018, 09:02   #10
Tuono63
Threadstarter Threadstarter
Neuer Benutzer
Neuer Benutzer
Standard

Und schon der nächste Stolperstein...

Die Abfrage mittels Kreuztabellenabfrage erstellt die Ausgabe ja dynamisch (was übrigens wunderbar funktioniert)

Das heißt für mich in einem Bericht, dass ich zwar die Felder der verschiedenen Abwesenheitsgründe (Überschriften und Felder) anlegen kann (Urlaub, Krankheit, Sonderurlaub etc.). Diese aber sowohl im Formular mit Fehler (#Name?) und in der Berichtsansicht mit einem Fehler beim öffnen quittiert werden, sobald der Wert (Grund) noch nicht in der Abbfrage vorhanden ist. Ist logisch...und macht ja auch Sinn!

Gibt es aber eine Möglichkeit das in der Abfrage oder im Bericht abzufangen?

Grüße
Tuono
Tuono63 ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 19.05.2018, 09:15   #11
Nouba
MOF Guru
MOF Guru
Standard

Siehe CrossTabReport auf Roger's Access Library.
Nouba ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 19.05.2018, 09:36   #12
Tuono63
Threadstarter Threadstarter
Neuer Benutzer
Neuer Benutzer
Standard

Hab schon gesehen, dass die Sachen mit dynamischen Tabellen und Berichten ein Thema in den Foren ist. Die Lösung ist zwar gut, aber das fühlt sich für mich so an, als würde ich mit Kanonen auf Spatzen schießen.

Lange Rede, kurzer Sinn..das scheint mir für eine einfache Urlaubsübersicht ein wenig zu groß.

Ich denke gerade darüber nach, einen Dummy-Datensatz in meine Tabelle aufzunehmen (erste ID), den ich im Bericht ausblende. So würde ich sicherstellen, dass alle Abwesenheitsfelder verfügbar sind.

Ist nur ein Gedanke.. Von dem ich aber noch gar nicht weiß ob er funktioniert...

Was sagt Ihr?

Tuono
Tuono63 ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 19.05.2018, 10:09   #13
Tuono63
Threadstarter Threadstarter
Neuer Benutzer
Neuer Benutzer
Standard

Also, hab es jetzt so gelöst:

Dummy Mitarbeiter angelegt, alle Abwesenheitsgründe mit z.B. Tage = 1 eingetragen und dann beim Ereignis im Detailbereich "Beim Formatieren" folgenden Code:
Code:

if MeinFeld = 0 then
detailbereich.visible = false
else
detailbereich.visible = true
end if
Ich bin mir nicht sicher, ob das eine elegante Lösung ist... Sie funktioniert aber einwandfrei auch ohne großen Aufwand.

Ich bin aber anderen Vorschlägen gegenüber immer aufgeschlossen!

Danke für Euren Einsatz!

Tuono
Tuono63 ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 22.05.2018, 11:05   #14
maikek
MOF Guru
MOF Guru
Standard

Fixierte Spaltenüberschriften: http://www.ardiman.de/datenbanken/gr...schriften.html
maike

__________________

Bitte dein Thema auf erledigt setzen, wenn's durch ist!
MOF Access Stammtisch in Bremen
maikek ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Ads
Antworten


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Besucher: 1)
 
Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge anzufügen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

vB Code ist An.
Smileys sind An.
[IMG] Code ist An.
HTML-Code ist An.
Gehe zu


Alle Zeitangaben in WEZ +1. Es ist jetzt 06:29 Uhr.


Partner und Co.
Access-Paradies -Alles rund um die Datenbank Microsoft Access -Code -Programme-Tools -Tipps   Kostenlose Tipps & Tricks, Downloads und Programme   www.kulpa-online.com - Tipps - Tricks - Tutorials - Meinungen - Downloads uvm...   vb@rchiv · Willkommen in der Welt der VB Programmierung   Access-Garhammer - Hier finden Sie jede Menge Beispiel-Datenbanken zu Access und mehr ...   mcseboard.de   Die Top Seite für Excel-VBA-Makros uvm.

Powered by: vBulletin Version 3.6.2 (Deutsch)
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.

Copyright ©2000-2018 MS-Office-Forum. Alle Rechte vorbehalten.
Copyright ©Design: Manuela Kulpa ©Rechte: Günter Kramer
Eine Verwendung der Inhalte in anderen Publikationen, auch auszugsweise,
ist ohne ausdrückliche Zustimmung der Autoren nicht gestattet.