-
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
-
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
-
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.
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