Neuigkeiten:

Ist euer Problem gelöst, dann bitte den Knopf "Thema gelöst" drücken!

Mobiles Hauptmenü

finden x-ter Wert in einer Tabelle je Teil

Begonnen von mstadler71, Oktober 10, 2024, 11:54:42

⏪ vorheriges - nächstes ⏩

mstadler71

Mahlzeit zusammen.
Ich stehe vor dem Problem, eine Preistabelle mit Mengenstaffeln nach dem x-ten Wert auslesen zu müssen.
d.h. ich habe einen Tabelle mit folgenden Feldern:
- Preislisten-Index (3 unterschiedliche)
- TeileNr
- Menge
- Preis für Menge

d.h. in Summe gibt es für 1 Produktprogramm 3 Preislisten (ABC-Kunden) mit entspr. Mengenstaffel (>50.000 Datensätze)
die Mengenstaffel ist nur für eine Teilmenge darin und kann 2,3,4 stufig sein.

Menge 1 gibt es immer; die Staffel dahinter ist inkonsistent; kann also z.B.:
- 1/5/10 Stk.
- 1/2/12/25 Stk. sein
Das ist rein produktabhängig

ich muss nun herausfinden, welcher Preis hinter z.B. der 2-ten Staffelmenge auf Teileebene in Preisliste "A" hinterlegt ist. wenn es keine Staffel gibt, dann den Basispreis (Menge =1)

Hat dafür jemand eine Access-Lösung?

herzlichen Dank für Eure Hilfe

lg
Michael


MzKlMu

#1
Hallo,
was ist denn aus Deinem anderen Thema (ca. 1 Jahr alt) geworden ?
Das scheint ja ähnlich zu sein.

Geantwortet hast Du dort jedenfalls nicht mehr.

https://www.access-o-mania.de/forum/index.php?topic=26788.msg160259
Gruß Klaus

PhilS

Zitat von: mstadler71 am Oktober 10, 2024, 11:54:42ich muss nun herausfinden, welcher Preis hinter z.B. der 2-ten Staffelmenge auf Teileebene in Preisliste "A" hinterlegt ist. wenn es keine Staffel gibt, dann den Basispreis (Menge =1)
Wenn ich dich richtig verstehe, dann stimmt diese Beschreibung im Detail so nicht.
Du willst nicht den x-ten Preis, sondern du willst den Preis, der zu der jeweiligen Menge passt.

Dann brauchst du eine Abfrage, die den Preis für die größte Menge, die die Bedingung Menge >= AktuelleMenge erfüllt,  ermittelt.

Mal einfach hier runtergetippt könnte das so aussehen, wobei die $Irgendwas-Werte deine aktuelle Kriterien sind.
SELECT  [Preis für Menge]
FROM deineTabelle dt1
WHERE [Preislisten-Index] = $AktuellerIndex
AND TeileNr = $AktuelleTeileNr
AND Menge >= $AktuelleMenge
AND NOT EXISTS (SELECT 'x' FROM  deineTabelle dt2
         WHERE dt2.[Preislisten-Index]  = dt1.[Preislisten-Index]
          AND dt2.TeileNr = dt1.TeileNr 
          AND dt2.Menge >= $AktuelleMenge
          AND  dt2.Menge < dt1.Menge)







Neue Videoserie: Windows API in VBA

Klassische CommandBars visuell bearbeiten: Access DevTools CommandBar Editor

mstadler71

#3
Hallo Klaus. Danke für den Hinweis. Das Thema war anders gelagert; Da ging es um eine Stufenhierarchie wo Werte auf unterschiedlichen Ebenen hinterlegt sind. Das konnte ich lösen

mstadler71

#4
Hallo PhilS; Danke, aber die Menge ist nicht relevant als Vorgabe. ich muss immer z.B. den Staffelpreis der zweitniedrigsten Menge ermitteln;
das ist ein strategischer Referenzwert für den Preisvergleich. "welche Kunden haben eine höheren/niedrigeren Preis auf Teileebene als den 2-ten Staffelpreis der ABC-Kundenliste"

also bildlich ausgedrückt:
-nach Preislistenindex/TeileNr/Staffelmenge/Preis gruppiert
-Menge aufsteigend sortiert
-Artikelpreis auslesen der zweitniedrigsten Menge/oder 1.Datensatz wenn es keine Staffel gibt


PhilS

Zitat von: mstadler71 am Oktober 10, 2024, 13:50:27ich muss immer z.B. den Staffelpreis der zweitniedrigsten Menge ermitteln;
Ok, dann folgender Lösungsansatz in Prosa:

1.) Erstelle eine Abfrage, die die Preistabelle pro Preisliste und Teilenummer anhand der Menge durchnummeriert. Siehe: FAQ 3.11 Laufende Nummer/Summe in Abfragen
2.) Erstelle eine zweite Abfrage die die Datensätze in der Preistabelle pro Preisliste und Teilenummer zählt und entweder 1 oder 2 ausgibt, je nachdem ob es ein oder mehr Datensätze sind.

3.) Erstelle eine dritte Abfrage in der du die beiden Abfragen über einen Join auf Preisliste und Teilenummer und den 1-oder-2-Wert verknüpfst.

Neue Videoserie: Windows API in VBA

Klassische CommandBars visuell bearbeiten: Access DevTools CommandBar Editor

mstadler71

Danke PhilS!
ich habe es mittlerweile genau so gelöst; hatte gehofft es geht "eleganter"  ;-)
lg
Michael