Access-o-Mania

Access-Forum (Deutsch/German) => Tabelle/Abfrage => Thema gestartet von: ferenz am September 10, 2011, 11:42:59

Titel: Filtern nach nicht leeren Zellen und nach >=30
Beitrag von: ferenz am September 10, 2011, 11:42:59
Schönen guten Tag Access-o-Mania Team,

ich bin Heute zum aller ersten mal hier bei euch mit einer für euch wohl banalen Anfrage. Ich habe mir Access in 2 Wochen Selbststudium beigebracht.  ::)Also nicht wundern.

Situation:
Ich muß eine Exceltabelle nach mehreren Kriterien gruppieren und filtern, um die jeweilige Anzahl festzustellen.
Bis zum letzten bzw. vorletzten Schritt hat es geklappt.
Feldeigenschaften:
1. Gruppierung nach "AA" und "BB".
2. Filtrierung nach "Quelle".
3. Filtrierung in 2 textformatierten Spalten nach nicht leeren Zellen in der einen Spalte oder in der anderen Spalte.
4. Filtrierung nach ">=30" einer als Zahl formatierten Spalte.

Problem:
Zum 3. Schritt: weiß nicht ob es klappt, da das selbe Ergebnis auch ohne das Kriterium zustande kommt. Kriterium ist "Ist nicht Null". Und beim 4 Schritt ist die Anzahl vom 2 Schritt gleich. Wie stelle ich die Kriterien auf?
Zum 4. Schritt: klappt nicht, obwohl ich im Kriterum ">=30" und die Spalte als Zahl formatiert habe. Mit Integer und double habe ich es probiert. Woran kann es noch liegen?


PS: Kann man auch leere Zellen zählen (zur Kontrolle)? Falls Ja, wie?

Ich hoffe das war verständlich ausgedrückt

Schönen sonnigen Samstag
Ferenz
Titel: Re: Filtern nach nicht leeren Zellen und nach >=30
Beitrag von: database am September 10, 2011, 13:25:13
Hallo,

also was nun - Access oder Excel?
Welche Tabellenspalten, wie ist der Tabellenaufbau, ... ?
Wenn es sich um Excel handelt, steht deine Frage im falschen Board - hier gehts um Access-Tabellen und Abfragen - trotzdem willkommen bei Access-o-Mania!

ZitatIch hoffe das war verständlich ausgedrückt

Sorry, nein!
Titel: Re: Filtern nach nicht leeren Zellen und nach >=30
Beitrag von: ferenz am September 10, 2011, 13:51:42
Danke für DEin Feedback,

habe eine Exceltabelle in Access importiert.
Tabellenspalten A bis E
Spalte A: Sind immer 2 Buchstaben, davon gibt es 8 verschiedene, die ich gruppieren kann
Spalte B: 3 verschiedene Kriterien, eine davon ist die Quelle wonach ich filtern muß
Spalte C und D: Sind datumswerte, die jedoch als text formatiert sind und nicht als datum konvertierbar sind
hier muß ich alle zeilen entfernen in denen bei beiden kein inhalt steht und die Anzahl ermitteln die übrig geblieben sind.
Das was übrig geblieben ist filtere ich in Spalte E nach "<= 30".
Spalte E: Hier stehen Zahlen in 10er Schritten.
Was genau meinst Du mit Tabellenaufbau?
Titel: Re: Filtern nach nicht leeren Zellen und nach >=30
Beitrag von: database am September 10, 2011, 14:27:03
Hallo,

soweit ok, also hast du eine Access-Tabelle zur Verfügung.

Hast du dann per Abfrageassistenten eine Abfrage erstellt oder wie waren die weiteren Schritte.

kannst du evtl die DB mit der betreffenden Tabelle komprimiert/repareirt und gezippt hier hochladen?
Titel: Re: Filtern nach nicht leeren Zellen und nach >=30
Beitrag von: ferenz am September 10, 2011, 15:02:11
Hallo Database,

Kann ich leider nicht hochladen. Ist fürs Geschäft und aus Datenschutzgründen darf ich keine Daten von dort auf meine privaten Sachen laden wie bspw. USB-Stick oder per mail versenden. Kann die Datei nur dort bearbeiten. Hatte mir gedacht hier Tipps zu erhalten, die ich dann dort umsetzen und ausprobieren kann.
Ich habe Access 2007 und habe mit dem Excel-Import-Assistenten die Excel-Datei importiert. Anschließend habe ich direkt über den Abfrageentwurf die Abfragen im Feldeigenschaftsfeld erstellt.
Titel: Re: Filtern nach nicht leeren Zellen und nach >=30
Beitrag von: database am September 10, 2011, 16:43:21
kein Problem, wenn du nichts hochladen kannst... wäre nur u.U. einfacher gewesen nachzusehen...

Also dann bitte ein wenig Geduld ich mach dir da was.
Titel: Re: Filtern nach nicht leeren Zellen und nach >=30
Beitrag von: database am September 10, 2011, 17:01:43
So, ein kleines Beispiel im Anhang

vielleicht hilfts dir weiter... :)

[Anhang gelöscht durch Administrator]
Titel: Re: Filtern nach nicht leeren Zellen und nach >=30
Beitrag von: ferenz am September 10, 2011, 21:00:18
Hallo Database,

schönen Dank für Deine Mühe :). Das ist genau der Aufbau der Quelldatei, nur mit 1000 von Datensätzen.
Um es zu vereinfachen denke ich ist es besser zuerst das 1 Problem anzugehen, das mit den leeren Zellen in beiden Spalten von Feld 3 und 4.
Im Gegensatz zur Deiner Datei werden bei mir die Daten im Feld 1 gruppiert.
Wie schaffe ich es nun von den insgesamt 18 Datensätzen die Datensätze raus zu schmeißen, die in beiden Feldern 3 und 4 leer sind und mir die Anzahl der restlichen Datensätze anzuzeigen?
Ich habe die Quelldatei vereinfacht und eine 2 Abfrage erstellt um es zuveranschaulichen wie ich es bisher gemacht habe.
Sprich es  sind insgesamt 18 Datensätze, ohne den leeren Zellen bei beiden Feldern 3 und 4 sollten es dann nur noch 15 sein.

LG Ferenz

[Anhang gelöscht durch Administrator]
Titel: Re: Filtern nach nicht leeren Zellen und nach >=30
Beitrag von: database am September 10, 2011, 21:43:35
Hallo,

ZitatIm Gegensatz zur Deiner Datei werden bei mir die Daten im Feld 1 gruppiert.
Das liegt daran, dass in meiner Datei die Informationen in den restlichen Feldern z.B. bei AA ungleich sind.
So z.B. steht in Feld 1 AA und in Feld 2 Max, in der nachsten Zeile AA und Fred ...
Die Gruppierung wirkt sich auf die Gesamtheit der Spalten eines Datensatzes aus und nicht nur auf die erste Spalte - daher auch eine mangelhafte Gruppierung.

Die Zählung der Datensätze ist somit ebenfalls vom Ergebnis der Gruppierung abhängig!

Um die Anzahl von 15 DS angezeigt zu bekommen benötigst du eine weitere Abfrage, die ihrerseits auf dem Ergebnis der Abfrage1 beruht,
die ja die Datensätze richtig AUSGEWÄHLT hat aber noch immer zuviele Datensätze trotz Gruppierung anzeigt und somit kein ordentliches
Zählergbnis liefern kann - begründet durch obige Aussage hinsichtlich Gruppierung (Ersichtlich durch die vielen Datensätze, die in Feld1 AA stehen
haben - alle Informationen rechts von Feld1 sind unterschiedlich wodurch die AA-Zeilen nicht zusammengefasst werden können)

Erstelle daher eine neue Abfrage und trage im SQL-Abschnitt folgende SQL ein.


SELECT Abfrage1.Feld1, Count(Abfrage1.Feld2) AS AnzahlvonFeld2
FROM Abfrage1
GROUP BY Abfrage1.Feld1;


Das Ergebnis dieser Abfrage ist eine Zeile mit Feld1 AA und der Anzahl 14 sowie eine Zeile mit Feld1 BB und der Anzahl 1
Auch hier tritt der oben angesprochene Effekt ein, du hast 2 unterschiedliche Werte in einem Feld stehen, die Gruppierung
faßt nun jeden Wert in eine Zeile zusammen und ermittelt die Anzahl der zusammengefassten Datensätze jeder Gruppe.

Möchtest du explizit die Anzahl 15 lesen, dann musst du Feld1 aus dieser Abfrage entfernen (nicht nur ausblenden sondern aus der Feldliste entfernen)

Also so:


SELECT Count(Abfrage1.Feld2) AS AnzahlvonFeld2
FROM Abfrage1;


Funktioniert deshalb weil in Feld2 nur gleiche Informationen enthalten sind.
Ist da im Echtsystem nicht der Fall, dann musst du dem Feld mit der Wenn-Funktion einen Alias (z.B. X:)  verpassen und dieses Feld in die obige Abfrage mit aufnehmen.
zum Zählen der Datensätze darf dann nur dieses eine Feld in der Abfrage verbleiben.
Die SQL der Abfrage1 müsste dann lauten:


SELECT Tabelle1.Feld1, Tabelle1.Feld2, Tabelle1.Feld3, Tabelle1.Feld4, Tabelle1.Feld5, IIf(IsNull([Feld4]) And IsNull([Feld3]),"2","1") AS X
FROM Tabelle1
GROUP BY Tabelle1.Feld1, Tabelle1.Feld2, Tabelle1.Feld3, Tabelle1.Feld4, Tabelle1.Feld5, IIf(IsNull([Feld4]) And IsNull([Feld3]),"2","1")
HAVING (((Tabelle1.Feld2)="Max") AND ((Tabelle1.Feld5)>=30) AND ((IIf(IsNull([Feld4]) And IsNull([Feld3]),"2","1"))="1"));


Diese Änderung würde dann folgende SQL für die Zählung, also die neue Abfrage bedingen:


SELECT Count(Abfrage1.X) AS AnzahlvonX
FROM Abfrage1;



HTH
Titel: Re: Filtern nach nicht leeren Zellen und nach >=30
Beitrag von: ferenz am September 11, 2011, 12:02:25
Hallo Database,

echt super. Das klappt echt prima. Ich muß jetzt nur noch mein Verständnis dafür schärfen. Denn ich brauche auch die Zwischenergebnisse und Deine 1. Abfrage sieht anders aus als meine Abfrage in der Originaldatei, da ich die Zwischenergebnisse erstellen konnte, aber halt mit einer anderen Abfrage.
Zur 1. Abfrage:
Die Gruppierung brauche ich nur für das 1. Feld dazu habe ich das Zwischenergebnis gebildet pro AA, etc:
Für das 2.Feld habe ich zwar gruppiert und dann das Zwischenergebnis gebildet, aber nur weil mir Access bei der Auswahl von Anzahl eine Datentypunverträglichkeit attestiert. Wenn ich das bei Deiner Abfrage genauso mache, dann ist das genauso. Wieso nur?
Das 3. und 4. Feld brauche ich nicht anzuzeigen. Nur das Zwischenergebnis ohne leere Zellen bei beiden Feldern, wie Du es mit der Wennfunktion in Deiner 1. Abfrage erstellt hast, halt ohne die Felder 3.&4. anzuzeigen.

PS: Wann benutzt man das Danke button? Kann man es bei jeder guten Antwort vergeben?
Schönen Sonntag
Titel: Re: Filtern nach nicht leeren Zellen und nach >=30
Beitrag von: database am September 11, 2011, 20:01:20
Hallo,

Zitat...Wenn ich das bei Deiner Abfrage genauso mache, dann ist das genauso. Wieso nur?
...weil sich das Setzen eines Textkriteriums mit der Anzahlfunktion nicht vereinbaren läßt.

Du kannst aber diesen Effekt natürlich auch mit einem kleinen Trick umgehen.
Verwende dazu folgende SQL für eine neue Abfrage und schau mal was dann passiert ...  ;)


SELECT Tabelle1.Feld1, Count(Tabelle1.Feld2) AS AnzahlvonFeld2, IIf([Feld2]="Max",1,2) AS F2Gruppe, IIf(IsNull([Feld4]) And IsNull([Feld3]),2,1) AS X
FROM Tabelle1
GROUP BY Tabelle1.Feld1, IIf([Feld2]="Max",1,2), IIf(IsNull([Feld4]) And IsNull([Feld3]),2,1)
HAVING (((IIf([Feld2]="Max",1,2))=1) AND ((IIf(IsNull([Feld4]) And IsNull([Feld3]),2,1))=1));


Zitat...Du es mit der Wennfunktion in Deiner 1. Abfrage erstellt hast, halt ohne die Felder 3.&4. anzuzeigen.
Ich habe die Datumsfelder angezeigt um dir die Orientierung etwas zu erleichtern.
Für die Erreichung deiner Anforderung müssen die natürlich nicht in der Spaltenliste verbleiben.
In der oben gezeigten SQL sind sie z.B. nicht mehr enthalten.  ;D

Zum Danke-Button:
Den kannst du nach belieben verwenden - in der Regel wird das gemacht, wenn eine Antwort hilfreich war oder die Beantwortung der gestellten Frage bewirkt.

HTH
Titel: Re: Filtern nach nicht leeren Zellen und nach >=30
Beitrag von: ferenz am September 12, 2011, 20:56:01
Hallo Database,

ich habe Deine Tipps versucht umzusetzen. An der Beispieldatei ist das kein Problem, aber heute im Geschäft kam entweder zuviel oder zuwenig raus. Je nach dem welche Felder ich in der 1. Abfrage hinzugefügt oder weggelassen habe. Igendwie habe ich die Gruppierung doch nicht ganz kapiert :(  . Irgenwie bin ich ein bischen ratlos. :'(

In der Originaldatei sind einfach zuviele Felder. Wenn ich ein neues Feld zur Abfrage hinzufüge, dann erhöht sich auch das Ergebnis. Ist das Normal?
Wenn ich bei der Abfrage auf Ausführen klicke, dann kann ich doch das Ergebnis überrpüfen. Da sind bei mir in der Originaldatei ein paar Datensätze wo beide Felder 3 und 4 leer sind. Das ist doch nicht normal, oder?
Entweder ich habe zuviele Felder, die mein Gruppierungs-Ergebnis verändert oder meine Wennfunktion ist falsch. Was denkst Du Database?

Schönen Abend
Ferenz