thomaskern
Goto Top

Update SQL Befehl

Hallo zusammen,

ich häng gerade an einem SQL Befehl fest, und wollte fragen ob mir evtl. jemand auf die Sprünge helfen kann?

Folgende Konstellation der Tabelle. (vereinfachte Ansicht)

Tabelle LAGER

4f92004aa59c6c31ee6e298aa3c44c95



Bsp.

Artikelnummer 1: 25 * 0,6% soll die 0 mit 15 ersetzten
Artikelnummer 2: 0,9 * 0,6 soll die 0 mit 0,63 ersetzen
usw.
.
So soll für jeden Artikel der B-Ware EK Preis berechnet werden.

hoffe ich konnte meine Frage verständlich machen.

Vorab besten Dank

Viele Grüße
Tom

Content-ID: 223395

Url: https://administrator.de/contentid/223395

Ausgedruckt am: 08.11.2024 um 12:11 Uhr

certifiedit.net
certifiedit.net 01.12.2013 um 12:38:32 Uhr
Goto Top
Hallo Tom,

wie sieht denn dein bisheriger Versuch aus? Abgesehen davon macht der Tabellenaufbau imho wenig Sinn?
Maliko
Maliko 01.12.2013 um 12:54:33 Uhr
Goto Top
Nun. Wenn du nicht alle auf einmal Ändern willst, dann könntest du es über folgendes Statement versuchen:

UPDATE Test SET EK = (SELECT Test.EK FROM Test WHERE Test.Lagerort = 'Hauptlager' AND Test.Artikelnummer = 1) * 0.6 WHERE Lagerort = 'B-Ware' AND Artikelnummer = 1
ThomasKern
ThomasKern 01.12.2013 um 13:00:42 Uhr
Goto Top
Hallo certifiedit,

vielen dank für die Antwort.

bin leider in SQL noch nicht so fit. Mein versuch war.

UPDATE Lager set Ek = Ek*0,6 where Lagerort = 'B-Ware'

ich vermute ich brauche noch eine zweites mal where wo die Artikelnummer mit einbeziehe.

Der Tabellen aufbau ist leider vorgegeben und kann von mir nicht verändert werden.

Viele Grüße
Tom
ThomasKern
ThomasKern 01.12.2013 um 13:06:36 Uhr
Goto Top
Hallo Maliko,

Danke für deine Hilfe.

doch ich möchte schon gerne alle Artikel auf einmal ändern. Später soll der Befehl auch täglich ausgeführt werden und für jeden Artikel den B-Ware EK neu berechnen.

Hintergrund:
nur immer die Hauptlager EK Preise werden aktuell gehalten, und die B-Ware EK Preise sollen automatisch angepasst werden. Der B-Ware EK ist immer Hauptlager EK * 0,6.

Viele Grüße
Tom
ThomasKern
ThomasKern 01.12.2013 um 14:34:20 Uhr
Goto Top
Kann mir keiner weiterhelfen??
Maliko
Maliko 01.12.2013 um 14:45:30 Uhr
Goto Top
Meines Wissens nach ist es gar nicht möglich das als ein einziges Statement zu lösen. Du musst es entweder für jede Artikelnummer einzeln machen, oder aber ein kleines Programm schreiben, welches in einer Schleife Artikelnummer für Artikelnummer durchgeht.
Biber
Biber 01.12.2013 aktualisiert um 18:22:04 Uhr
Goto Top
Moin ThomasKern,

willkommen im Forum.

Zitat von @ThomasKern:

Bsp.

Artikelnummer 1: 25 * 0,6% soll die 0 mit 15 ersetzten
Artikelnummer 2: 0,9 * 0,6 soll die 0 mit 0,63 ersetzen
So, bei euch sind also 90 Cent * 60% als Verkaufspreis dann 63 Cent?
Dann sei froh, wenn ich der einzige Nachrechner bleibe.

Bei einer Updateanweisung kämen jedenfalls 0.54 statt 0.63 heraus, um zum Kern zu kommen (kleines Wortspiel).

Beispiel:
Update Lager L left join (
   Select Artikelnummer, 0.6 * Ek as calcEK 
   from Lager 
   where Lagerort ="Hauptlager"  
  ) H on L.artikelnummer=H.artikelnummer
set  L.Ek = H.CalcEK
where L.lagerort="B-Ware"  
and exists (select 1  from Lager H 
                where H.Lagerort ="Hauptlager"   
               and H.Artikelnummer=L.artikelnummer)

Wenn der (unterstellte) PK deiner Lagertabelle dann auch "lagerort, artikelnummer" ist, dann sollte es klappen.

P.S. Ich würde mich eher krankmelden, bevor ich in einer produktiven DB ein Update auf Stringvergleiche wie "B-Ware" und "Hauptlager" mache. Gibt es da wenigstens Constraints auf eine Lagerort-Tabelle bzw. eine Artikeltabelle?

Und wie jedes zweite Mal in diesem Bereich:
wir können besser helfen, wenn wir wissen, mit welcher Datenbank und welcher Version hier rumgeSQLed wird.

Grüße
Biber
ThomasKern
ThomasKern 01.12.2013 um 18:19:33 Uhr
Goto Top
Danke für die Hilfe ;)