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
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)
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
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
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
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
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
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
=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).
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
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.
Hallo ihr "Alle",
habe eure Beispiele nicht nur ausprobiert, sondern auch umgesetzt - es funktioniert
Vielen Dank
Accessoraner
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
@Domm,
siehe Difference between Left() and Left$() function in Access (https://stackoverflow.com/questions/37899862/difference-between-left-and-left-function-in-access).
Tja, ich kann leider kein Englisch... :-[
Trotzdem dankeschön!
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
@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
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