1. Liebe Forumsgemeinde,

    aufgrund der Bestimmungen, die sich aus der DSGVO ergeben, müssten umfangreiche Anpassungen am Forum vorgenommen werden, die sich für uns nicht wirtschaftlich abbilden lassen. Daher haben wir uns entschlossen, das Forum in seiner aktuellen Form zu archivieren und online bereit zu stellen, jedoch keine Neuanmeldungen oder neuen Kommentare mehr zuzulassen. So ist sichergestellt, dass das gesammelte Wissen nicht verloren geht, und wir die Seite dennoch DSGVO-konform zur Verfügung stellen können.
    Dies wird in den nächsten Tagen umgesetzt.

    Ich danke allen, die sich in den letzten Jahren für Hilfesuchende und auch für das Forum selbst engagiert haben. Ich bin weiterhin für euch erreichbar unter tti(bei)pcwelt.de.
    Dismiss Notice

PLZ soll Zielwert aus Intervall liefern.

Discussion in 'Office-Programme' started by Siljen, Oct 13, 2008.

Thread Status:
Not open for further replies.
  1. Siljen

    Siljen ROM

    Hallo,

    ich habe als Access-DAU folgendes Problem:

    Ich habe zwei Tabellen mit den Namen "PLZ" und "Ziel".

    Inhalt der Tabelle "PLZ": Verschiedene PLZ von 01000 bis 99999 (in einer Spalte mit dem Namen "EMPFPLZ").
    Sieht so aus:

    EMPFPLZ
    01037
    28317
    36678
    42129


    Inhalt der Tabelle "Ziel": Intervalle, die den PLZ ein bestimmtes Ziel zuordnen (Spaltennamen "PLZ_AB" und "ZIEL").
    Sieht so aus:


    PLZ_AB ZIEL
    01000 02
    10000 05
    20000 03
    30000 09
    40000 23
    usw. usw.


    Jetzt sind in beiden Tabellen mehrere tausend Werte, d.h. eine manuelle Programmierung über Kriterien innerhalb einer Abfrage ist schier unmöglich.
    In Excel wäre das Ganze ja leicht über einen SVERWEIS zu lösen, aber ich brauche es in Access :-).

    Die Zieltabelle (bzw. Abfrage) sieht am Ende wie folgt aus bzw. soll folgendes Ergebnis liefern:

    EMPFPLZ ZIEL
    01937 02
    28317 03
    36678 09
    42129 23
    usw. usw.


    Meine Frage jetzt: Wie geht das??? Geht ja bestimmt irgendwie über VBA. Wie sähe hier der Code aus oder noch besser, vielleicht geht es ja auch ohne VBA :-).

    Über brauchbare Antworten würde ich mich sehr freuen!

    Siljen :bitte:
     
  2. Hascheff

    Hascheff Moderator

    Hallo Siljen,
    was lange währt, wird endlich gut.
    :sorry:, aber dein Problem war nicht nur etwas knifflig, (Das wurmt mich schon, dass es komplizierter als in Excel ist, aber vielleicht gibt es ja noch eine einfachere Lösung.) sondern ich hatte in den letzten Wochen auch wenig Zeit.

    Den entscheidenden Dreh hatte ich sofort: Eine Auswahlabfrage mit beiden Tabellen ohne Verknüpfung. Dadurch wird jeder Datensatz mit jedem Datensatz der anderen Tabelle verbunden. Die Zahl der Datensätze multipliziert sich also. Hier könnte ein Problem in der praktischen Anwendung entstehen: Mit vier Testdatensätzen geht es Nullkommanix, bei Millionen DS wartest du vielleicht.
    Aber es wird ja auch gleich gefiltert.

    Code:
    SELECT PLZ.EMPFPLZ, Ziel.PLZ_AB, Ziel.ZIEL
    FROM PLZ, Ziel
    WHERE (((PLZ.EMPFPLZ)>[Ziel]![PLZ_AB]));
    
    Ich hab die Abfrage "Temp" genannt.

    Die zweite Filterung habe ich in einer Kreuztabellenabfrage mit einem Dummy als Spaltengruppierung realisiert, weil hier die Funktion "Maximum" zur Verfügung steht.
    Code:
    TRANSFORM Max(Temp.PLZ_AB) AS [Max von PLZ_AB]
    SELECT Temp.EMPFPLZ
    FROM Temp
    GROUP BY Temp.EMPFPLZ
    PIVOT 1;
    
    Ich hab die Abfrage "Zuordnung" genannt.

    Als Dummy nimmt er leider nur eine Zahl (hier 1), so dass ich noch eine Auswahlabfrage für ein Alias angehängt habe.
    Code:
    SELECT Zuordnung.EMPFPLZ, Zuordnung.[1] AS Bereich
    FROM Zuordnung;
    
    Voila.

    Sicher lässt sich das Ganze auch in VBA realisieren, aber ich vermute, eine Lösung ohne VBA ist dir lieber. Die letzte Abfrage kann man ja auch als Tabellenerstellungsabfrage oder als Anfügeabfrage gestalten.
     
Thread Status:
Not open for further replies.

Share This Page