-
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
-
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
Andreas
Ein AS/400 Dinosaurier since 1989
-
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
-
 Zitat von B.Hauser
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
-
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
-
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.
-
 Zitat von Fuerchau
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
-
dec(Ausdruck, 8, 7) = 8 Stellen, davon 7 Nachkomma
deshalb
dec(Ausdruck, 15, 7) = 15 Stellen, davon 7 Nachkomma, also 8 Vorkomma
-
 Zitat von Fuerchau
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
-
By WalterB in forum NEWSboard Programmierung
Antworten: 1
Letzter Beitrag: 22-11-15, 15:06
-
By sonicreducer in forum NEWSboard Programmierung
Antworten: 1
Letzter Beitrag: 01-04-15, 15:27
-
By RolandScherieble in forum IBM i Hauptforum
Antworten: 4
Letzter Beitrag: 05-05-03, 20:00
-
By Bau in forum IBM i Hauptforum
Antworten: 2
Letzter Beitrag: 05-12-02, 16:43
-
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
-
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