Announcement

Collapse
No announcement yet.

Update einer Tabelle mit unterschiedlichen Bedingungen

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • 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
    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?
    Zuletzt editiert von Christian Marquardt; 04.03.2017, 16:05.
    Christian

    Comment


    • #3
      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.

      Comment


      • #4
        Eine Variante ohne OR, das IN macht es aber sehr ähnlich:
        [highlight=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
        [/highlight]

        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

        Comment


        • #5
          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

          Comment

          Working...
          X