[NEWSboard IBMi Forum]
  1. #1
    Registriert seit
    Jan 2015
    Beiträge
    8

    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.

  2. #2
    Registriert seit
    Jun 2001
    Beiträge
    1.975
    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!)

  3. #3
    Registriert seit
    Feb 2001
    Beiträge
    20.241
    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.
    Dienstleistungen? Die gibt es hier: http://www.fuerchau.de
    Das Excel-AddIn: https://www.ftsolutions.de/index.php/downloads
    BI? Da war doch noch was: http://www.ftsolutions.de

Similar Threads

  1. CASE in Kombination mit IN
    By mojo in forum NEWSboard Programmierung
    Antworten: 2
    Letzter Beitrag: 27-05-15, 11:01
  2. Optimierung beim Sql-Case
    By fpxx in forum NEWSboard Programmierung
    Antworten: 2
    Letzter Beitrag: 19-05-15, 11:42
  3. SQL Update --> Berechnung mit &Var
    By sonicreducer in forum NEWSboard Programmierung
    Antworten: 1
    Letzter Beitrag: 01-04-15, 15:27
  4. SQL Datumsabfrage aus case Feld
    By mk in forum NEWSboard Programmierung
    Antworten: 1
    Letzter Beitrag: 29-08-14, 09:24
  5. Lagermanagement von CASE Software
    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
  •