Willkommen bei Entwickler-Forum.
Ergebnis 1 bis 5 von 5
  1. #1
    Stammgast
    Registriert seit
    31.10.2007
    Beiträge
    176

    Standard Update einer Tabelle mit unterschiedlichen Bedingungen

    Hallo zusammen,

    ich bediene Bestellungen über mehrere Lager. Bei der Anpassung der Bestände habe ich einen Fall, bei dem mit einem Update 2 Felder einer Tabelle
    geändert werden müssen.

    Die Tabelle sieht so aus:

    bestand_id
    artikel_nr
    bestand_lager
    bestand_menge

    Sagen mal für Artikel 4711 liegen 20 Stück im Lager 1 und 50 Stück in Lager 2

    Es werden jetzt 25 Stück verkauft. Zuerst soll Lager 1 berücksichtigt werden der Rest aus Lager 2

    Mit 2 Updates würde es so gehen:

    Update bestand set bestand_lager = bestand_lager - 20 where bestand_lager = 1 and artikel_nr = 4711
    Update bestand set bestand_lager = bestand_lager - 5 where bestand_lager = 2 and artikel_nr = 4711

    Die Werte für die Abgänge der einzelnen Lager ermittle ich vorher.

    Die Anweisung wird am Ende eines komplexen Schleifen / Bedingungen Konstrukts ausgeführt und ich kann nur eine Anweisung
    übergeben. Daher die Frage wie ich beide Updates in eine Anweisung bekomme.

    Gruß Nevada

  2. #2
    Forenheld
    Registriert seit
    26.02.2003
    Beiträge
    16.230

    Standard

    mittels OR...wie auch immer mit welchen zusätzlichen Bedingungen
    Aber natürlich bleibt die Frage, wenn das nicht funktioniert
    Die Anweisung wird am Ende eines komplexen Schleifen / Bedingungen Konstrukts ausgeführt und ich kann nur eine Anweisung
    übergeben.
    Wer hat das programiert?
    Geändert von Christian Marquardt (04.03.2017 um 16:05 Uhr)
    Christian

  3. #3
    Stammgast
    Registriert seit
    31.10.2007
    Beiträge
    176

    Standard

    Programmiert habe ich das. Ich muss insgesamt 4 Lager abfragen, die Bestände prüfen und schauen von welchem Lager
    geliefert wird. Kompliziert wird es, da die Lager teilweise die gleichen Artikel mit unterschiedlichen Beständen haben können.
    Ein Lager hat nur eigene Artikel, die aber wiederum von einem der anderen 3 Lagern verschickt werden können, des Bestand wird aber
    separat geführt.... und noch ein paar Besonderheiten die berücksichtigt werden müssen.

  4. #4
    Stammgast
    Registriert seit
    24.10.2011
    Beiträge
    1.284

    Standard

    Eine Variante ohne OR, das IN macht es aber sehr ähnlich:
    Code SQL:
     UPDATE bestand
       SET bestand_lager =
           CASE
             WHEN lager = 1 THEN bestand_lager - 20
             WHEN lager = 2 THEN bestand_lager - 5
           END
     WHERE lager IN (1,2)
       AND artikel_nr = 4711

    Ich geh mal davon aus, dass Deine Where Bedingung nicht so gemeint ist wie sie da steht und hab das geändert.

    Wieso kannst Du nur einen Befehl absetzen?
    Kannst Du wenigstens die Anzahl der geänderten Datensätze am Ende prüfen?
    Und woher weißt Du, dass zwischendurch niemand anderes ändert?
    Ist das transaktional gesichert oder ist es ein Glücksspiel, ob die Verteilung je Lager noch stimmt, wenn das Update kommt?

    Für sowas würde man wohl eher eine SP einsetzen oder anderweitig dafür sorgen, dass es nicht zu Fehlern kommt.
    Gruß, defo

  5. #5
    Stammgast
    Registriert seit
    31.10.2007
    Beiträge
    176

    Standard

    Hallo defo,

    da aus den gleichen Lägern auch noch Kunden aus dem stationären Handel bedient werden, ist eine genaue Bestandsabbildung sowieso nicht möglich.
    Wir arbeiten mit einem Sicherheitsbestand, also zeigen nur 80% des Bestandes an der wirklich da ist um die Verfügbarkeit ein bischen zu kompensieren.
    Da wir nur Artikel haben die in der Regel kurzfristig wieder verfügbar sind, ist es weniger problematisch. Die Bestände werden nicht in Echtzeit abgefragt, nur
    alle 4 Stunden aktualisiert.

    Gruß Nevada

 

 

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •