[NEWSboard IBMi Forum]
Seite 1 von 2 1 2 Letzte
  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.077
    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.873
    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 - 4. 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.077
    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.241
    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.241
    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

  11. #11
    Registriert seit
    Aug 2006
    Beiträge
    2.077
    Dann geh doch mal überall auf 30,5 und schau mal ob es läuft.
    Sollte wirklich groß genug sein ;-)

    Vielleicht hast Du ja einen Ausreißer in den Zahlen.

    Alternativ mal ein Query und da die Summe berechnen lassen.

    GG

  12. #12
    Registriert seit
    Feb 2001
    Beiträge
    20.241
    Lass einfach mal das zwischendurch casten weg und erzwinge Nachkomma:

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

    Ein cast auf Double verliert Genauigkeit und erzwingt ein Runden oder abschneiden des Ergebnisses.
    Ggf. ersetze 0,01 mit 0.01, je nach Dezimalzeichen.
    Schau dir die Ergebnisse an.

    Ggf. brauchst du das Ergebnis wieder nicht zu casten sondern stellst dies in eine Hostvariable deines Formates. Mit einem NULL-Anzeiger erfährst du auf Satzebene (-2), wann der Wert nicht passt.
    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. 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
  •