[NEWSboard IBMi Forum]

Hybrid View

  1. #1
    Registriert seit
    Dec 2009
    Beiträge
    314

    SQL - Insert mit select berechnung eines Wertes

    Hallo,

    wie kriege ich aus folgenden werden mittels select einen vernünftigen wert für ein insert?

    select sum(((t67.lgdcov /100 * expeigcov) +
    (t67.lgduncov /100 * expeigunco)) /
    (expeigcov + expeigunco - zussisum))
    from lea/leadwht1, lea/leat67 t67

    Felddef: lgd* Numeric 5, 2
    alle anderen Decimal 13, 2

    das Ergebnis soll Numeric 8,7 sein
    Vielen Dank im voraus
    Andreas
    Andreas
    Ein AS/400 Dinosaurier since 1989

  2. #2
    Registriert seit
    Aug 2006
    Beiträge
    2.114
    Schau Dir doch mal die DEC Funktion an.

    GG

  3. #3
    Registriert seit
    Dec 2009
    Beiträge
    314
    Erfolgreich herumprobiert und das am Faschingdienstag gggg

    select
    ((decimal(expeigcov * double(t67.lgdcov)/100, 13 , 2) +
    decimal(expeigunco * double(t67.lgduncov)/100, 13 , 2)) /
    (expeigcov + expeigunco - zussisum))

    bringt mir als Ergebnis


    0,39999999986143126


    Gruss aus Wien
    Andreas
    Ein AS/400 Dinosaurier since 1989

  4. #4
    Registriert seit
    Aug 2001
    Beiträge
    2.928
    Wenn Du bei der Funktion DEC/DECIMAL, weder Länge noch Nachkommastellen angibst, woher soll er wissen, dass Du 8, 7 (wobei ich auf mindestens 11, 7 gehen würde) willst?

    ggf. kannst Du noch auf 7 Stellen mit Funktion ROUND kaufmännisch runden.

    Birgitta
    Birgitta Hauser

    Anwendungsmodernisierung, Beratung, Schulungen, Programmierung im Bereich RPG, SQL und Datenbank
    IBM Champion seit 2020 - 5. Jahr in Folge
    Birgitta Hauser - Modernization - Education - Consulting on IBM i

  5. #5
    Registriert seit
    Dec 2009
    Beiträge
    314
    Zitat Zitat von B.Hauser Beitrag anzeigen
    Wenn Du bei der Funktion DEC/DECIMAL, weder Länge noch Nachkommastellen angibst, woher soll er wissen, dass Du 8, 7 (wobei ich auf mindestens 11, 7 gehen würde) willst?

    ggf. kannst Du noch auf 7 Stellen mit Funktion ROUND kaufmännisch runden.

    Birgitta
    Hallo Birgitta,

    könntest Du mir dabei bitte helfen, damit ich das Ergebnis auf 8, 7 kriege, den ich bekomme jetzt
    einen Überlauf wie du richtig angemerkt hast.
    Rechne zum ersten mal mehr als nur summen oder Subtraktion mit SQL bin ein alter COBOL-Programmierer und alt im sprichwörtlichen Sinn.

    LG
    Andreas
    Andreas
    Ein AS/400 Dinosaurier since 1989

  6. #6
    Registriert seit
    Aug 2006
    Beiträge
    2.114
    Ist zwar Microsoft, funktionier aber auch unter AS/400.

    https://msdn.microsoft.com/de-de/library/ms187746%28v=sql.120%29.aspx

    Alternativ:
    http://www-01.ibm.com/support/knowle...f_decimal.dita

    In Summe: dec(10, 2) = 10 Stellen davon 2 Nachkomma.

    GG

  7. #7
    Registriert seit
    Feb 2001
    Beiträge
    20.695
    Du musst die Funktion um deine Summe packen:
    dec(sum(...), 15, 7)

    Beachte dabei, dass das Ergebnis abgeschnitten wird, ggf. mach noch einen Round im Dec:
    dec(round(sum(...), 7), 15, 7)

    Beachte auch, dass es zu einem SQL-Fehler kommt, wenn das Ergebnisi > 8 Stellen vor dem Komma wird.
    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

  8. #8
    Registriert seit
    Dec 2009
    Beiträge
    314
    Zitat Zitat von Fuerchau Beitrag anzeigen
    Du musst die Funktion um deine Summe packen:
    dec(sum(...), 15, 7)

    Beachte dabei, dass das Ergebnis abgeschnitten wird, ggf. mach noch einen Round im Dec:
    dec(round(sum(...), 7), 15, 7)

    Beachte auch, dass es zu einem SQL-Fehler kommt, wenn das Ergebnisi > 8 Stellen vor dem Komma wird.
    ich habe das DEC(....), 8, 7) eingebaut, was mir folgende Einzelergebnisse vereinfacht dargestellt liefert:
    1. Berchnung 2. Berechnung 3.Berechung
    5.000.000,00 + 0,80 / 15.000.000,00
    wobei 1. Berechnung und 2. Berechung zusammen und 3.Berechnung alleine max. 99.999.999,99 ergeben können und 1 + 2 / 3 maximal 1,0000000

    und bekomme jetzt folgenden Fehler


    Nachrichten-ID . . . . : SQL0406 Bewertung . . . . . . : 30
    Nachrichtenart . . . . : Diagnose
    Sendedatum . . . . . . : 16.02.09 Sendezeit . . . . . . : 09:49:01

    Nachricht . . . : Umsetzungsfehler bei der Zuordnung zu Spalte LGD_COV.
    Ursache . . . . : Bei dem Versuch, Spalte LGD_COV mit einer Anweisung
    INSERT, UPDATE, ALTER TABLE oder REFRESH TABLE einen Wert zuzuordnen, ist
    ein Umsetzungsfehler der Art 1 aufgetreten. Wurde eine Vorkompilierung
    durchgeführt, ist der Fehler aufgetreten, als eine numerische Konstante in
    dieselben Attribute wie Spalte LGD_COV umgesetzt werden sollte. Mögliche
    Fehlerarten sind:
    -- Fehlerart 1 - Überlauf.
    -- Fehlerart 2 - Gleitkommaüberlauf.
    -- Fehlerart 3 - Gleitkommaunterlauf.
    -- Fehlerart 4 - Gleitkommaumsetzungsfehler.

    Wenn ich den Aufruf native ausführe bekomme ich für die Berechnung folgendes Ergebnis(auszugsweise):

    Ausdruck CASE
    2.512.556,6900000000000000
    289.699,7500000000000000
    91.641,2900000000000000
    3.894.073,4600000000000000
    360.586,9500000000000000
    5.436.586,2500000000000000
    2.633.054,1000000000000000
    10.516.225,7000000000000000
    16.044.414,2000000000000000
    2.674.854,3700000000000000
    4.499.917,6500000000000000

    und hier noch der aktuelle auszug aus dem sqlstatement
    dec(((decimal(dwht1.expeigcov * double(t67.lgdcov)/100, 13 , 2) +
    decimal(dwht1.expeigunco * double(t67.lgduncov)/100, 13 , 2)) /
    (dwht1.expeigcov + dwht1.expeigunco - dwht1.zussisum)), 8, 7),
    Last edited by nico1964; 09-02-16 at 09:51. Grund: Noch mehr Infos
    Andreas
    Ein AS/400 Dinosaurier since 1989

  9. #9
    Registriert seit
    Feb 2001
    Beiträge
    20.695
    dec(Ausdruck, 8, 7) = 8 Stellen, davon 7 Nachkomma
    deshalb
    dec(Ausdruck, 15, 7) = 15 Stellen, davon 7 Nachkomma, also 8 Vorkomma
    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

  10. #10
    Registriert seit
    Dec 2009
    Beiträge
    314
    Zitat Zitat von Fuerchau Beitrag anzeigen
    dec(Ausdruck, 8, 7) = 8 Stellen, davon 7 Nachkomma
    deshalb
    dec(Ausdruck, 15, 7) = 15 Stellen, davon 7 Nachkomma, also 8 Vorkomma
    geändert aber leider der selbe Fehler, bin kurz vor dem verzweifeln oder ich sehe den Wald vor lauter Bäumen nicht mehr
    Andreas
    Ein AS/400 Dinosaurier since 1989

Similar Threads

  1. SQLXML select/insert
    By WalterB in forum NEWSboard Programmierung
    Antworten: 1
    Letzter Beitrag: 22-11-15, 15:06
  2. SQL Update --> Berechnung mit &Var
    By sonicreducer in forum NEWSboard Programmierung
    Antworten: 1
    Letzter Beitrag: 01-04-15, 15:27
  3. Berechnung SINUS/COSINUS
    By RolandScherieble in forum IBM i Hauptforum
    Antworten: 4
    Letzter Beitrag: 05-05-03, 20:00
  4. ILE RPG, Berechnung extern definieren
    By Bau in forum IBM i Hauptforum
    Antworten: 2
    Letzter Beitrag: 05-12-02, 16:43
  5. Suche Tool für Berechnung Zeitdifferenz
    By sho1 in forum IBM i Hauptforum
    Antworten: 5
    Letzter Beitrag: 04-12-02, 18:55

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • You may not post attachments
  • You may not edit your posts
  •