Neuigkeiten:

Wenn ihr euch für eine gute Antwort bedanken möchtet, im entsprechenden Posting einfach den Knopf "sag Danke" drücken!

Mobiles Hauptmenü

Abfrage von Versandkosten aus einer Matrix

Begonnen von dawe, März 29, 2019, 10:45:41

⏪ vorheriges - nächstes ⏩

dawe

Hallo Zusammen,
ich beschäftige mich seit einiger Zeit damit, Versandkosten in eine bestehende Abfrage zu bekommen.
Folgender Sachverhalt liegt vor:
Ich habe eine Abfrage zu Lieferungen mit Kunde, Versanddatum, Versandgewicht, Tracking-ID und Versandart, diese läuft super, ich kann nach Versanddatum selektieren etc. Die Versandart heisst bspw. DHL Versenden Kunde1.

Nun kommt das Knifflige, denn ich möchte basierend auf Versandart (DHL, GLS etc.), Versandland und Versandgewicht die korrespondierenden Versandkosten aus einer anderen Tabelle abfragen.

Bsp.:
Kunde 1; Österreich; DHL Versenden Kunde1; 3,86kg. Wir haben nach Österreich einen kg-basierten Tarif, d.h. es gibt einen Grundpreis und einen kg-Aufschlag. In diesem Fall wäre dies also AT 3-4kg = x,xx€.

Wie muss ich a) die Versandkostentabelle aufbauen und vor allem b) wie kann ich die Abfrage aufbauen?

Versandart und Versandart miteinander zu verknüpfen ist klar, aber beim Versandgewicht fehlt mir total die Idee... Ich hoffe, dass meine Beschreibung irgendwie verständlich ist, was ich meine.

Beaker s.a.

@dawe
ZitatWie muss ich a) die Versandkostentabelle aufbauen
Hast du doch schon fast selbst beantwortet; -
Zitatich möchte basierend auf Versandart (DHL, GLS etc.), Versandland und Versandgewicht die korrespondierenden Versandkosten aus einer anderen Tabelle abfragen.
"andere Tabelle" = "Versandkostentabelle?
Mein Vorschlag,
deine jetzige Tabelle "Versandart" würde ich umbenennen in "VersandDL"
(DL = Dienstleister). Eine Tabelle "Versandart" müsste die verschiedenen
Services (Nachnahme, Terminzustellung usw.) berücksichtigen. Der DL
müsste in dieser Tabelle als FK (Fremdschlüssel) geführt werden.
Die Tabelle "Tarife" müsste dann in etwa so aussehen, wobei ich gewichts-
unabhängige Tarife erstmal aussen vorgelassen habe, weil ich mir da
noch nicht im Klaren bin, wie man die integriert. Vielleicht kann mir da
einer von den Regulars zur Seite stehen;
Tarife:
- TarifID (Autowert, PK)
- VersandArtID_F (FK zu Versandarten)
- EmpfangsLandID_F (FK zu Laender)
- Gewicht_von (Zahl, Währung) ! vorgegebenes Format löschen/ändern !
- Gewicht_bis (w.o.)
- Tarif (Zahl, Währung)
Falls es einen einfachen Kilotarif gibt (Gewicht * Kilopreis) würden die
Gewichtsfelder entfallen und aus "Tarif" wird "Kilopreis".

Die Abfrage dann etwa so (mit Gewichtsgrenzen)
SELECT Tarif
FROM Tarife
WHERE VersandartID_F = aktuelleVersandart
    AND EmpfangslandID_F = aktuellesLand
    AND Gewicht_von <= aktuellesGewicht AND Gewicht_bis >= aktuellesGewicht

mit Kilopreis
SELECT Kilopreis * aktuellesGewicht As Tarif
FROM Tarife
WHERE VersandartID_F = aktuelleVersandart
    AND EmpfangslandID_F = aktuellesLand

Die Ausdrücke mit "aktuelle..." sind hier Platzhalter für die tatsächlichen
Quellen (kann ich im Post nicht erkennen)

gruss ekkehard
Alles, was geschieht, geschieht. - Alles, was während seines Geschehens etwas anderes geschehen lässt, lässt etwas anderes geschehen. - Alles, was sich selbst im Zuge seines Geschehens erneut geschehen lässt, geschieht erneut. - Allerdings tut es das nicht unbedingt in chronologischer Reihenfolge.
(Douglas Adams, Mostly Harmless)

dawe

Hallo Ekkehard, genau dieser Vergleich AktuellesGewicht = Gewicht von/bis, der war mir nicht klar. Das ist auf jeden Fall ein hilfreicher Tip. Wird auf jeden Fall ein Spaß, die Versandtarif-Tabelle mit den Von/Bis-Gewichten aufzubauen...

Beaker s.a.

@dawe
ZitatWird auf jeden Fall ein Spaß, die Versandtarif-Tabelle mit den Von/Bis-Gewichten aufzubauen...
Tja, die Arbeit wirst du dir wohl machen müssen. Vielleicht können dir die
DL ihre Tarife ja auch digital (.xls, .csv) zur Verfügung stellen.
Bei Gewichtsstaffeln sollte das mit den davon unabhängigen Nebenkosten
(z.B. Nachnahmegebühr) auch nicht so schwer sein unterzubringen.
Erstelle dafür eine Staffel von 0kg bis zum max. Gewicht. Die Abfrage würde
dann zwei (oder auch mehr) DS ausspucken, und müsste dem entsprechend
umgeschrieben werden
SELECT Sum(Tarif) As Versandkosten
FROM Tarife
WHERE VersandartID_F = aktuelleVersandart
    AND EmpfangslandID_F = aktuellesLand
    AND Gewicht_von <= aktuellesGewicht AND Gewicht_bis >= aktuellesGewicht


gruss ekkehard
Alles, was geschieht, geschieht. - Alles, was während seines Geschehens etwas anderes geschehen lässt, lässt etwas anderes geschehen. - Alles, was sich selbst im Zuge seines Geschehens erneut geschehen lässt, geschieht erneut. - Allerdings tut es das nicht unbedingt in chronologischer Reihenfolge.
(Douglas Adams, Mostly Harmless)