Access-o-Mania

Access-Forum (Deutsch/German) => Tabelle/Abfrage => Thema gestartet von: Accessoraner am Januar 19, 2018, 20:35:27

Titel: Anzahl Datensätze aus mehreren PLZ Bereichen darstellen
Beitrag von: Accessoraner am Januar 19, 2018, 20:35:27
Hallo zusammen,
in der Tabelle "tbl_unternehmen" sind die Adressdaten aller Kunden enthalten
Ich möchte jetzt die Anzahl der Kunden in den jeweiligen PLZ-Bereichen in einem Bericht darstellen.

Also Anzahl der Kunden im PLZ Bereich 5 (50000 bis 59999), PLZ Bereich 6 (60000 bis 69999) , ...
Die PLZ stehen im Feld "unt_PLZ"; es soll nur die Anzahl selbst ausgegeben werden

Ich kann zwar die Anzahl von einem Bereich wie folgend auslesen, aber nicht mehrere.

Query: z. Bsp:    PLZ5: [unt_PLZ] mit dem Kriterium >50000 und < 59999

Bericht: =Anzahl([PLZ5])

Ich bitte um eure Hilfe

Danke und viele Grüße
Accessoraner
Titel: Re: Anzahl Datensätze aus mehreren PLZ Bereichen darstellen
Beitrag von: DF6GL am Januar 19, 2018, 21:07:51
Hallo,

der Bericht muss nach dem PLZ-Bereich gruppiert werden. Dann kann die Anzahl der (Kunden)-DS der einzelnen Gruppen angezeigt werden.


Gruppieren nach Ausdruck:  Links([PLZ];1)

oder als Abfrage:


Select Left(PLZ,1) as PLZBereich , Count(*) as AnzahlKunden from tbl_unternehmen Group by left([PLZ],1)
Titel: Re: Anzahl Datensätze aus mehreren PLZ Bereichen darstellen
Beitrag von: Accessoraner am Januar 20, 2018, 11:45:24
Danke für die schnelle Antwort, aber irgendwie verstehe ich es wohl nicht ganz

Wenn ich in der Query  GRUPPIERUNG nach Ausdruck einstelle und bei Kriterium Links([unt_PLZ];1) eintrage bekomme ich doch nur alle Datensätze mit einstelliger PLZ, bzw Links([unt_PLZ];4) alle Datensätze mit vierstelliger PLZ

Angezeigt hätte ich aber gerne die Anzahl aller Datensätze des jeweiligen PLZ Bereichs   0 bis 9

was mach ich falsch?

Zweite Frage: wo und wie muss ich die zweite Variante mit dem SELECT eintragen, vielleicht wäre dies der einfache Weg, ich möchte ja nur die Anzahl angezeigt bekommen.

Danke für die Hilfestellung und viele Grüße
Accessoraner
Titel: Re: Anzahl Datensätze aus mehreren PLZ Bereichen darstellen
Beitrag von: Lachtaube am Januar 20, 2018, 12:34:54
Ob nun PLZ, die hoffentlich als Text ausgelegt ist, oder etwas anderem wie Namen (abgekürzt hier als NN in Tabelle T), ist bei der Gruppierung vollkommen egal.
T 
NN
Müller
Meier
Schmidt
Schmitz
Kasupke
Rietze
Rudolf
Racke

Die Abfrage
SELECT Left$([NN],1) AS ByLetter, Count(*) AS AnzNamen
FROM T
GROUP BY Left$([NN],1);
liefert dann

Query1 
ByLetterAnzNamen
K
1
M
2
R
3
S
2
Titel: Re: Anzahl Datensätze aus mehreren PLZ Bereichen darstellen
Beitrag von: Joss am Januar 20, 2018, 12:43:48
Hallo Accessoraner,

Zitatder Bericht muss nach dem PLZ-Bereich gruppiert werden. Dann kann die Anzahl der (Kunden)-DS der einzelnen Gruppen angezeigt werden.

Als Anhang ein Muster, wie es in A2010 aussieht.

Gruß
Josef

Titel: Re: Anzahl Datensätze aus mehreren PLZ Bereichen darstellen
Beitrag von: Accessoraner am Januar 20, 2018, 14:00:20
Hallo Alle zusammen,

vielleicht habe ich mich etwas unklar ausgedrückt; der gruppierte Bericht ist mir schon verständlich, aber ich suche nicht den nach PLZ gruppierten Bericht mit den Anzahlen der Datensätzen

Ich hätte gern 10 Textfelder , Beschriftung PLZ 0 bis PLZ 9 mit der Anzahl der jeweils enthaltenen Datensätzen
Die Datensätze stehen in der Tabelle: tbl_unternehmen; das PLZ Feld heißt [unt_PLZ]

Muster: Plz Bereich 5        65 Datensätze
            Plz Bereich 6       123 Datensätze

Mehr sollte nicht angezeigt werden

Nochmals vielen Dank für die Hilfe
Accessoraner
Titel: Re: Anzahl Datensätze aus mehreren PLZ Bereichen darstellen
Beitrag von: Accessoraner am Januar 20, 2018, 15:09:31
Ich habe etwas probiert und bin zu folgendem Zwischenergebnis gekommen.

Mit "DomAnzahl" wird mir die richtige Anzahl angezeigt (hier aus PLZ 70771) nur wie muss ich die Formel ändern, dass mir alle PLZ beginnend mit " 7 " gezählt werden oder ganz pauschal erste Stelle von links in dem gewünschten Feld

=DomAnzahl("[unt_PLZ]";"qry_anzahl";"[unt_PLZ]=70771")

[unt_PLZ] Felder mit den PLZ | qry_anzahl = zugehörige Query

Danke und viele Grüße
Accessoraner
Titel: Re: Anzahl Datensätze aus mehreren PLZ Bereichen darstellen
Beitrag von: Joss am Januar 20, 2018, 15:31:31
Hallo Accessoraner,

nochmal zurück zu dem nach dem ersten Zeichen gruppierten Bericht.
Wenn du im Bericht den Detailbereich weglässt, und im Gruppenfuß ein ungebundenes Textfeld einfügst, in dem die Anzahl folgendermaßen dargestellt wird:
Steuerelementinhalt:
="Plz Bereich " & Links([unt_PLZ];1) & " " & Anzahl([unt_PLZ]) & " Datensätze"

Ergibt das nicht deine gewünschte Auflistung?
Oder verstehe ich dich falsch?

Gruß
Josef
Titel: Re: Anzahl Datensätze aus mehreren PLZ Bereichen darstellen
Beitrag von: Lachtaube am Januar 20, 2018, 15:46:59
=DomAnzahl("*";"qry_anzahl";"unt_PLZ Like '7####'")
Das müsstest Du dann für jeden Bereich wiederholen. Vermutlich kannst Du auch gleich die Adress-Tabelle ohne Umweg über eine Abfrage in den Ausdruck einsetzen.

Persönlich würde ich aber eine Abfrage als Basis für den Bericht bevorzugen (weil schneller und ressourcenschonender), der die 10 Datensätze dann untereinander ausgibt (siehe Ahang).
Titel: Re: Anzahl Datensätze aus mehreren PLZ Bereichen darstellen
Beitrag von: Accessoraner am Januar 20, 2018, 16:17:03
Hallo Lachtaube,

das ist das was ich gesucht habe, so eine Art Anzahlabfrage für alles - vielen Dank

Zusatzfrage: wenn ich jetzt nach Anzahl in einem Datumsfeld suche und zwar bestimmten Monat und Jahr bringt mir folgendes Fehlermeldung

=DomAnzahl("*";"qry_anzahl_datum";"unt_datum Like '*.mm,jjjj'")

wie müsste der Code hierfür lauten

Nochmals DANKE und viele Grüße
Accessoraner
Titel: Re: Anzahl Datensätze aus mehreren PLZ Bereichen darstellen
Beitrag von: MzKlMu am Januar 20, 2018, 16:54:23
Hallo,
die Anzeige der PLZ Gruppen geht doch mit einem Bericht völlig problemlos auch ohne die Aggregatfunktionen (Dom...).
In einer Abfrage die erste Zahl der PLZ ermitteln, diese Abfrage als Datenbasis für den Bericht und den Bericht nach der 1. Zahl gruppieren.
Der Detailbereich bleibt leer und im Gruppenkopf wird mit =Anzahl(*) die Summe gebildet. Fertig. MusterDB anbei.
was es jetzt aber mit der Suche nach Jahr und Monat auf sich hat, musst Du mal genauer erklären.
Wenn ich was suchen will, muss ja irgendwo eingegeben werden nach was gesucht werden soll. Und Suchen macht nur in einem Formular Sinn. Oder willst Du den Bericht auf Jahr und Monat filtern?
Aber auch dann müssen die Filterwerte ja eingegeben werden.

Nachtrag:
Habe gerade gesehen, mein Beispiel ist doppelt gemoppelt. Lachtaube hat das auf die gleiche Art gelöst. Hatte das Beispiel übersehen.

Aber die Frage mit dem Jahr/Monat bleibt natürlich.
Titel: Re: Anzahl Datensätze aus mehreren PLZ Bereichen darstellen
Beitrag von: Accessoraner am Januar 28, 2018, 13:34:41
Hallo ihr "Alle",

habe eure Beispiele nicht nur ausprobiert, sondern auch umgesetzt - es funktioniert

Vielen Dank
Accessoraner
Titel: Re: Anzahl Datensätze aus mehreren PLZ Bereichen darstellen
Beitrag von: Domm am Januar 28, 2018, 21:24:49
Hallo Lachtaube, wieso ist in Deinem Beispiel das Dollarzeichen im Textfeld? Kenne ich nur als absoluten Verweis in Excel...
Zitat=Links$([plz];1) & "xxxx"
Liebe Grüße
Titel: Re: Anzahl Datensätze aus mehreren PLZ Bereichen darstellen
Beitrag von: Lachtaube am Januar 29, 2018, 05:16:41
@Domm,

siehe Difference between Left() and Left$() function in Access (https://stackoverflow.com/questions/37899862/difference-between-left-and-left-function-in-access).
Titel: Re: Anzahl Datensätze aus mehreren PLZ Bereichen darstellen
Beitrag von: Domm am Januar 30, 2018, 14:25:34
Tja, ich kann leider kein Englisch... :-[
Trotzdem dankeschön!
Titel: Re: Anzahl Datensätze aus mehreren PLZ Bereichen darstellen
Beitrag von: Beaker s.a. am Januar 30, 2018, 15:41:04
Hallo Domm,
Die Essenz ist, dass Left() mit NULL umgehen kann und Left$() eben
nicht. D.h. wenn es bei der Verwendung eines Strings vorkommen kann
das dieser den Wert NULL hat verwendest du Left(); - Left$() würde einen
Laufzeitfehler erzeugen.
gruss ekkehard
Titel: Re: Anzahl Datensätze aus mehreren PLZ Bereichen darstellen
Beitrag von: MzKlMu am Januar 30, 2018, 15:59:45
@Domm
wenn man den Text nach translate.google kopiert erhält man brauchbare Übersetzungen.
https://translate.google.com/?hl=de

Die nachfolgende Übersetzung stammt original aus dem Link, ohne die geringste Nachbearbeitung. Nutze ich auch immer wieder.
ZitatDas nachfolgende $ ist ein Typdeklarationszeichen für den Datentyp Zeichenfolge in VBA.
Das von Left $ () zurückgegebene Ergebnis ist eine Zeichenkette, während Left () eine Variante zurückgibt.
Sie müssen Left (), nicht Left $ () verwenden, wenn eine Null-Wahrscheinlichkeit besteht, da die Variant Null sein kann, aber der String nicht. Um das zu demonstrieren:
Drücken Sie Strg + G, um das Sofort-Fenster zu öffnen.
Eingeben: ? Links (Null, 1) Die Antwort ist Null.
Jetzt eingeben:? Left $ (Null, 1) Dies erzeugt Fehler 94. Da das Ergebnis Null sein sollte und der String nicht Null sein kann, erhalten Sie den Fehler "ungültige Verwendung von Null".
Wenn Sie mit String-Werten arbeiten, ist Left $ () in VBA-Code etwas effizienter, da der Overhead / Inefficiency der Variant vermieden wird. Wenn jedoch die Möglichkeit besteht, dass NULL-Werte beteiligt sind, verwenden Sie Left (), oder behandeln Sie den Null-Wert explizit mit Nz ().
left $ () gibt eine Zeichenkette zurück oder erzeugt einen Fehler, wenn NULL übergeben wird
left () gibt einen String oder NULL zurück, wenn NULL übergeben wird
Titel: Re: Anzahl Datensätze aus mehreren PLZ Bereichen darstellen
Beitrag von: Lachtaube am Januar 30, 2018, 16:22:43
Im Vergleich dazu DeepL, der IMHO bessere Englisch-Deutsch Übersetungen liefert.
ZitatUnterschied zwischen Left() und Left$() Funktion in Access

Ich versuche, eine fehlerhafte Abfrage zu debuggen. Die Abfrage verwendet Left$([blahblah],4) anstelle von Left([blahblah],4).

Was ist der Unterschied zwischen den Funktionen Left() und Left$() in Microsoft Access?

'-------------------------------------------------------------

Das nachgestellte $ ist ein Typdeklarationszeichen für den Datentyp String in VBA.

Das Ergebnis, das von Left$() zurückgegeben wird, ist ein String, während Left() einen Variant zurückgibt.

Sie müssen Left() verwenden, nicht Left$(), wenn es irgendeine Chance auf Null-Werte gibt, da die Variante Null sein kann, aber der String nicht. Um das zu demonstrieren:

    Drücken Sie Strg+G, um das Immedate-Fenster zu öffnen.

    Eingabe: ? Links(Null,1) Die Antwort ist Null.

    Jetzt geben Sie ein: ? Left$(Null,1) Dies erzeugt den Fehler 94. Da das Ergebnis Null sein sollte und der String nicht Null sein kann, erhalten Sie den Fehler "Ungültige Verwendung von Null".

Wenn Sie es mit String-Werten zu tun haben, wird Left$() im VBA-Code etwas effizienter sein, da es den Overhead und die Ineffizienz, die mit der Variante verbunden sind, vermeidet. Wenn jedoch die Möglichkeit besteht, dass Nulls beteiligt sein könnten, verwenden Sie Left(), oder behandeln Sie die Null explizit mit etwas wie Nz().

    left$() gibt einen String zurück oder generiert einen Fehler, wenn NULL übergeben wird.

    left() gibt einen String oder NULL zurück, wenn NULL übergeben wird.

Mehr Informationen zu Nulls: http://allenbrowne.com/casu-11.html

Übersetzt mit www.DeepL.com/Translator