[NEWSboard IBMi Forum]

Thema: aufrunden SQL

Hybrid View

  1. #1
    Registriert seit
    Mar 2002
    Beiträge
    5.365
    - die Funktion zum runden heißt round und hat 2 Parameter, der erste beinhaltet den Wert zum runden, der zweite die Nachkommastellen.
    - gerundet wird nach dem Betrag.
    - ab einer 5 in der ersten ungültigen Stelle wird aufgerundet
    - darunter wird abgerundet
    Beispiele:
    round(1.5, 0) liefert 2
    round(-1.5, 0) liefert -2
    alles andere ist Quatsch!!!

    D*B
    AS400 Freeware
    http://www.bender-dv.de
    Mit embedded SQL in RPG auf Datenbanken von ADABAS bis XBASE zugreifen
    http://sourceforge.net/projects/appserver4rpg/

  2. #2
    Registriert seit
    Aug 2001
    Beiträge
    2.928
    Ich will auch mal Klugscheißer des Tages werden!

    @Malzusrex:
    Bei Deiner Case Anweisung wird, sofern die Ausgangszahl eine ganze Zahl ist, 0,5 hinzuaddiert. Ich glaube, das war nicht gewünscht.

    @Dieter:
    Nicht immer ist das kaufmännische Runden erwünscht.
    Aufrunden und Abfrunden auf die nächste Ganzzahl haben durchaus ihre Existenzberechtigung. (vergl. Gaußklammer)
    Wenn ich auf eine Palette 20 Kartons packen kann, dann benötige ich für 100 Kartons 5 Paletten, für 101 Kartongs jedoch 6 Paletten.

    ... und seit 7.3 kann die Funktion ROUND auch mit nur einem Parameter angegeben werden. In diesem Fall wird auf die nächste Ganz-Zahl kaufmännisch gerundet.
    ... sofern man bei der Funktion ROUND im zweiten Parameter eine negative Zahl angibt, kann man auch kaufmännisch z.B. auf den 10er (-1), auf den Hunderter (-2) etc. runden.

    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

  3. #3
    Registriert seit
    May 2002
    Beiträge
    1.121
    Zitat Zitat von B.Hauser Beitrag anzeigen
    Ich will auch mal Klugscheißer des Tages werden!

    @Malzusrex:
    Bei Deiner Case Anweisung wird, sofern die Ausgangszahl eine ganze Zahl ist, 0,5 hinzuaddiert. Ich glaube, das war nicht gewünscht.


    Birgitta
    Stimmt! Habe es abgeändert
    (Auch wenn deine Variante immer noch einfacher und übersichtlicher ist)
    PHP-Code:
    select  myfeld,                                      
    case 
    when MyFeld-int(MyFeld)=0 then Myfeld else      
    case 
    when MyFeld-int(MyFeldbetween 0,51 and 0,99   
    then int
    (MyFeld) + else int(Myfeld) +0,5 end end   
    from MyFile 
    Gruß Ronald

  4. #4
    Registriert seit
    Aug 2001
    Beiträge
    2.928
    Auch das kann man vereinfachen!
    Code:
    select  myfeld,                                      
    case when MyFeld-int(MyFeld) = 0 then Myfeld      
         when MyFeld-int(MyFeld) between 0,51 and 0,99   
         then int(MyFeld) + 1 
         else int(Myfeld) +0,5 end   
    from MyFile
    Heute bekomme ich wirklich den Klugscheißer-Preis.

    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

  5. #5
    Registriert seit
    Feb 2001
    Beiträge
    20.696
    Ist doch auch eine Auszeichnung;-)!
    Ich sag ja immer "Warum einfach wenn es auch komplizierter geht".
    Vielleicht kann man ja den Case noch erweitern auf "Rundungen" mit 0,25, 0,10 und 0,05...
    Dann wird es erst vollständig.
    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

  6. #6
    Registriert seit
    May 2002
    Beiträge
    1.121
    Und ich habe wieder was gelernt.
    Bis eben gab es für mich beim CASE nur
    Case when ... then ... else .. end.

    Insofern ist "Klugscheißen" doch was Gutes ;-)

    Danke und schon mal ein schönes Wochenende
    Ronald

  7. #7
    Registriert seit
    Feb 2001
    Beiträge
    20.696
    Auch dabei gibts dann trotzdem 2 Varianten:

    case Ausdruck
    when Const1 then ...
    when Const2 then ...
    else ...
    end

    Z.B.
    case Faktor
    when '2' then 10
    when '3' then 100
    when '4' then 1000
    else 1
    end

    Der Nachteil ist eben, dass man nur Konstanten verwenden darf.

    Der "case when Asdruck then ..." erlaubt dann eben wieder hochkomplexe Abfragen, die auch skalare Subselects einschließen.
    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
    Mar 2002
    Beiträge
    5.365
    ... für die 3. Klasse geht die Klugscheißerei noch durch, für die 6. Klasse reicht es allenfalls noch knapp für eine 4. Negative Zahlen werden halt nach Betrag gerundet und da wird das Case Konstrukt zum Käse Konstrukt und taugt genauso wenig wie Ceiling.

    D*B
    AS400 Freeware
    http://www.bender-dv.de
    Mit embedded SQL in RPG auf Datenbanken von ADABAS bis XBASE zugreifen
    http://sourceforge.net/projects/appserver4rpg/

Berechtigungen

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