-
SQL Update Case Berechnung
Schönen guten Tag,
ich hätte da eine Sorge bei der Ihr mir vielleicht helfen könnt.
Da unsere User die Eingaben nicht gewissenhaft auf die Kette bekommen würde ich gerne
ein Eingabefeld regelmäßig per SQL korrigieren.:
Code:
select
case
when b.tme in ('St','ST') and a.vvolpe != round(decimal((a.vmasl*(a.vmasb/100)*(a.vmass/1000)), 15, 6), 6) then round(decimal((a.vmasl*(a.vmasb/100)*(a.vmass/1000)), 15, 6), 6)
when b.tme='m' and (a.vvolpe != round(decimal(((a.vmasb/100)*(a.vmass/1000)), 15, 6), 6) and a.vmasb!='0' and a.vmass!='0') then round(decimal(((a.vmasb/100)*(a.vmass/1000)), 15, 6), 6)
when b.tme='m2' and a.vmass!='0' and a.vvolpe != round(decimal((a.vmass/1000), 15, 6), 6) then round(decimal((a.vmass/1000), 15, 6), 6)
when b.tme='m3' and a.vvolpe != '1.000000' then '1.000000' end Berechnung -- zu änderndes Feld
from kd.yarv a
join kd.yar b on b.artn=a.vartn
where (a.arvlv='' and a.arvsv='') and (b.arlv='' and b.arsv='')
and b.tarst1 in ('1','2', '3','4','5','6','7','8','9','H')
and a.vartnv not in ('FIX', 'ZUS')
and b.tat1 not like ('%Rohfix%') and tat2 not like ('%Rohfix%')
and (b.tat2 not like ('%sonst%') and b.tat1 not like ('%sonst%'))
and(
(b.tme in ('St','ST') and a.vvolpe != round(decimal((a.vmasl*(a.vmasb/100)*(a.vmass/1000)), 15, 6),6) and (a.vmasl!='0' and a.vmasb!='0' and a.vmass!='0') ) or
(b.tme='m' and (vvolpe != round(decimal(((a.vmasb/100)*(a.vmass/1000)), 15, 6), 6) and a.vmasb!='0' and a.vmass!='0')) or
(b.tme='m2' and a.vvolpe != round(decimal((a.vmass/1000), 15, 6), 6) and a.vmass!='0' ) or
(b.tme='m3' and vvolpe != '1')
)
In diesem Fall geht es um das Volumen im Artikelstamm welches entsprechend berechnet werden und im Fall der Abweichung ersetzt werden soll.
Leider bekomm ich immer die Meldung: "Unterabfrage ergab mehr als eine Zeile..."
Mein herzlichen Dank im voraus.
-
Kannst du nicht stattdessen einen Trigger die Daten immer richtig schreiben lassen!
Sporadisch ein Korrektur sql ist duch 'sub-Optimal'
zu deinem SQL ...
mehr als eine Zeile sagt doch alles ...
Du mußt genauer selektiern oder mit max() bzw min() arbeiten
Robi
Das Notwendige steht über dem technisch machbaren.
(klingt komisch, funktioniert aber!)
-
Dein Problem ist ggf. dass der Join mehr als 1 Zeile erzeugt, d.h., dass artn nicht eindeutig ist.
Das solltest du aber beim Select schon feststellen.
Wenn du nun einen Update schreibst, musst du bedenken, dass du ggf. sowieso für jeden Satz einen Update machst.
Um nur die falschen upzudaten benötigst du die Berechnung nämlich 2x!
update myfile
set feld = (Berechnungs-Select)
where feld <> (Berechnungs-Select)
Für den (Berechnungs-Select) lohnt sich in diesem Fall ggf. schon eine SQL-Function.
Langfristig gebe ich meinem Vorredner recht, dass ein Trigger da eher hilft.
Similar Threads
-
By mojo in forum NEWSboard Programmierung
Antworten: 2
Letzter Beitrag: 27-05-15, 11:01
-
By fpxx in forum NEWSboard Programmierung
Antworten: 2
Letzter Beitrag: 19-05-15, 11:42
-
By sonicreducer in forum NEWSboard Programmierung
Antworten: 1
Letzter Beitrag: 01-04-15, 15:27
-
By mk in forum NEWSboard Programmierung
Antworten: 1
Letzter Beitrag: 29-08-14, 09:24
-
By Kirsten Steer in forum Archiv NEWSblibs
Antworten: 0
Letzter Beitrag: 14-04-03, 12:39
Tags for this Thread
Berechtigungen
- Neue Themen erstellen: Nein
- Themen beantworten: Nein
- You may not post attachments
- You may not edit your posts
-
Foren-Regeln
|
Erweiterte Foren Suche
Google Foren Suche
Forum & Artikel Update eMail
AS/400 / IBM i
Server Expert Gruppen
Unternehmens IT
|
Kategorien online Artikel
- Big Data, Analytics, BI, MIS
- Cloud, Social Media, Devices
- DMS, Archivierung, Druck
- ERP + Add-ons, Business Software
- Hochverfügbarkeit
- Human Resources, Personal
- IBM Announcements
- IT-Karikaturen
- Leitartikel
- Load`n`go
- Messen, Veranstaltungen
- NEWSolutions Dossiers
- Programmierung
- Security
- Software Development + Change Mgmt.
- Solutions & Provider
- Speicher – Storage
- Strategische Berichte
- Systemmanagement
- Tools, Hot-Tips
Auf dem Laufenden bleiben
|
Bookmarks