View Full Version : 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
KingofKning
09-02-16, 07:22
Schau Dir doch mal die DEC Funktion an.
GG
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
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
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
KingofKning
09-02-16, 08:21
Ist zwar Microsoft, funktionier aber auch unter AS/400.
https://msdn.microsoft.com/de-de/library/ms187746%28v=sql.120%29.aspx
(https://msdn.microsoft.com/de-de/library/ms187746%28v=sql.120%29.aspx)
Alternativ:
http://www-01.ibm.com/support/knowledgecenter/SSEPEK_10.0.0/com.ibm.db2z10.doc.sqlref/src/tpc/db2z_bif_decimal.dita
In Summe: dec(10, 2) = 10 Stellen davon 2 Nachkomma.
GG
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.
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),
dec(Ausdruck, 8, 7) = 8 Stellen, davon 7 Nachkomma
deshalb
dec(Ausdruck, 15, 7) = 15 Stellen, davon 7 Nachkomma, also 8 Vorkomma
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