[NEWSboard IBMi Forum]

Hybrid View

  1. #1
    Registriert seit
    Jan 2003
    Beiträge
    302

    Rechnen mit SQL

    Hallo zusammen,

    ich muss mit SQL rechnen und führe dabei verschiedene
    Befehle aus, bis auf einen klappt das auch wunderbar !

    Folgende Rechenformel macht mich "fertig"...

    select cast( 9920 /12000 * 145000 as decimal(13,0) ) as wert from datei where feld=1

    Ich habe schon die verschiedensten "Klammern" gesetzt, habe auch über "Punkt vor Strichrechnung" nachgedacht und die Formel vom Ursprung ((12000-2080)/12000 * 145000) auf den o.g. Wert geändert...
    ABER es kommt immer 0 raus !!!!!


    Lt. "Windows calc" und "Excel" müsste aber 119866,666666 rauskommen !

    In Excel lautet die Formel "=(E2-E3)/E2*B2", wobei die Zellen..
    E2 = 12000
    E3 = 2080
    B2 = 145000
    die gezeigten Werte haben !
    !

    Hat irgend jemand einen Tipp oder vielleicht sogar die Lösung ?

    Vielen Dank im Voraus !
    Peet

  2. #2
    Registriert seit
    May 2002
    Beiträge
    1.121
    Tag auch,

    versuhe mal im STRSQL
    PHP-Code:
    values((12000,0-2080)/12000*145000
    Da solltest du dein Ergebnis erhalten


    Gruß
    Ronald

  3. #3
    Registriert seit
    Jan 2003
    Beiträge
    302
    Vielen Dank !

    Aber ich kriege es leider nicht hin oder stehe gerade auf dem Schlauch

    Kannst du mir den SQL-Befehl vollständig darstellen ??
    Zumindest den "select ....." bis "from" ?

    Vielen Dank im Voraus !
    Peet

  4. #4
    KM is offline [professional_User]
    Registriert seit
    Apr 2003
    Beiträge
    1.012
    Hallo,

    das hat mit den Typen und Längen der Zwischenergebnisse zu tun. Probier mal folgendes:

    Code:
    select cast(cast((12000 - 2080) as decimal(13 , 5)) / cast(12000 as decimal(13 , 5)) * 145000 as decimal(13 , 0)) as wert from sysibm.sysdummy1
    Gruß,
    KM

  5. #5
    Registriert seit
    May 2002
    Beiträge
    1.121
    Du brauchst nur das was in den Klammer von Values stehen in dein Selcect einfügen.
    oder eben meine Zeile ohne irgend etwas anderes im STRSQL eingeben. Da sollte dann schon dein Ergebnis kommen.
    Die Antwort von KM sieht natürlich auch elegant aus und liefert dir dein Ergebnis.

    Gruß
    Ronald

  6. #6
    Registriert seit
    Aug 2001
    Beiträge
    2.928
    Die Erklärung ist ganz einfach!

    Besteht eine Rechnung aus 2 Integer-Werten, ist das Ergebnis wieder ein Integer-Wert (so lautet die Regel und nicht nur in SQL bzw. auf der IBM i).
    Da für 9920, 12000 und 145000 keine Nachkommastellen angegeben wurden, werden diese Werte als Integer-Werte behandelt.

    9920 / 12000 = 0,8266666...
    Da das Ergebnis jedoch wieder ein Integer-Wert ist, werden die Nachkommastellen abgeschnitten, d.h. statt 0,826... mit 0 weitergerechnet.

    Werden bei einer Zahl Nachkommastellen angegeben, so wird diese nicht mehr als Integer erkannt, sondern als Fließkomma interpretiert und das Ergebnis ist wiederum ein Fließkomma-Wert.

    Du hast also die Möglichkeit die einzelnen Werte explizit z.B. auf Dezimal zu casten, oder einfach die erste Zahl mit 0 Nachkommastellen angeben:

    9920,0 / 12000
    Natürlich sollte man die Reihenfolge beachten, wird 145000 als Fließkomma interpretiert und die anderen beiden Werte als Integer, ist das Kind bereits in den Brunnen gefallen. Da keine Klammern gesetzt wurden wird zunächst 9920 / 12000 dividiert, und das Ergebnis (0) mit 145000 multipliziert. 0 * irgendwas = 0.

    Ich gehe jedoch davon aus, dass dies nur ein Test war und die Spalten in der Datei nicht als Integer-Werte definiert sind, sondern als gepackte oder gezonte numerische Werte.

    Kleiner Tipp, ich würde die Division immer am Ende durch führen, also:

    9920,0 * 145000 / 12000
    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

  7. #7
    Registriert seit
    Feb 2001
    Beiträge
    20.696
    Ich nehme mal an, dass die Konstanten ggf. nur Beispiele sind und ggf. auch aus Feldern kommen.
    Sind die Felder Ganzzahl und man möchte Nachkomma, so ist wenigstens ein Feld mit Nachkomma zu casten:

    dec(F1, 11, 2) / dec(F2, 11, 2) * dec(F3, 11, 2)

    Wichtig ist, dass ggf. Zwischenschritte gerundet werden sollten, da SQL u.U. abschneidet, z.B.:

    round(dec(F1, 11, 2) / dec(F2, 11, 2), 2) * dec(F3, 11, 2)
    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
    Jan 2003
    Beiträge
    302
    Vielen Dank an Alle !

    Jetzt habe ich es "hingekriegt"

    Und an Britta den "erweiterten" Dank für die zusätzlichen "ausführenden" Erklärungen !!!

    Weiterhin viel Erfolg und ein schönes Wochenende !!

    Gruß
    Peet

Similar Threads

  1. SQL - Cursor vernichten ?!?
    By FNeurieser in forum NEWSboard Programmierung
    Antworten: 3
    Letzter Beitrag: 11-10-06, 14:53
  2. SQL - Fehler
    By Kaufmann in forum IBM i Hauptforum
    Antworten: 11
    Letzter Beitrag: 28-06-06, 14:11
  3. SQL .. for update of (RPG embedded SQL)
    By loeweadolf in forum NEWSboard Programmierung
    Antworten: 2
    Letzter Beitrag: 01-06-06, 09:43
  4. SQL - Rechnen bei left-outer-join verknüpfung
    By hzille in forum NEWSboard Programmierung
    Antworten: 1
    Letzter Beitrag: 06-07-04, 10:38

Berechtigungen

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