[NEWSboard IBMi Forum]
Seite 1 von 2 1 2 Letzte
  1. #1
    Registriert seit
    Apr 2012
    Beiträge
    360

    Sql Berechnungen

    Morgen Morgen,

    Ich habe eine Datei, wo Stunden, Stundensatz, %-Rabatt und %-Aufschlag angegeben ist.

    Ich soll hier alle Summen bilden (Std. * Std.Satz), aber falls im Feld %-Rabatt oder Feld %-Aufschlag etwas angegeben worden ist, muss ich das würdigen.

    Ist das mit einem Sql-Statement machbar, oder brauch ich da eine Programm-Routine?


    Gruß

    Tarki

  2. #2
    Registriert seit
    Aug 2003
    Beiträge
    1.508
    Ja möglich ist es schon.
    Dafür könntest du einfach eine CASE Anweisung verwenden.
    CASE
    when RabattFeld > 0
    Then "Berechne Rabatt"
    Else StdSatz
    END

    lg Andreas

  3. #3
    Registriert seit
    Aug 2003
    Beiträge
    1.508
    Hier hab ich noch ein kleines Beispiel. Mit einer Vorselektierung ist es sicher einfacher.
    Im innersten Select berechnest du den Zuschlag, Rabatt und was noch alles geben könnte.
    Und im äußeren Select zählst du einfach alles zusammen.

    Code:
    select StdSatz , StdSatz - Rabatt+ Zuschlag, Rabatt, Zuschlag 
    from (   
    select StdSatz ,                                         
    case 
      when Rabatt > 0 
      then StdSatz /100 * Rabatt
      else 0 
      end Rabatt,
    case 
      when Zuschlag > 0 
      then StdSatz /100 * Zuschlag
      else 0 
      end Zuschlag,
    from t4
    ) t1

  4. #4
    Registriert seit
    Apr 2012
    Beiträge
    360
    Zitat Zitat von andreaspr@aon.at Beitrag anzeigen
    Hier hab ich noch ein kleines Beispiel. Mit einer Vorselektierung ist es sicher einfacher.
    Im innersten Select berechnest du den Zuschlag, Rabatt und was noch alles geben könnte.
    Und im äußeren Select zählst du einfach alles zusammen.

    Code:
    select StdSatz , StdSatz - Rabatt+ Zuschlag, Rabatt, Zuschlag 
    from (   
    select StdSatz ,                                         
    case 
      when Rabatt > 0 
      then StdSatz /100 * Rabatt
      else 0 
      end Rabatt,
    case 
      when Zuschlag > 0 
      then StdSatz /100 * Zuschlag
      else 0 
      end Zuschlag,
    from t4
    ) t1
    Morgen Andreas,

    cool, besten Dank.
    Werde es gleich am Nachmittag ausprobieren.


    Lg

    Tarki

  5. #5
    Registriert seit
    Apr 2012
    Beiträge
    360
    Hallo Andreas,

    bekomme ein Token-Fehler.
    Was habe ich da falsch angegeben?
    STD = geleistete Stunden
    STS = Stundensatz

    SELECT SUM(DECIMAL(STD * STS, 7, 2)) FROM FILE
    (select STS,
    case
    when RAB > 0
    then STS / 100 * RAB
    else 0
    end RAB,
    when AUF > 0
    then STS / 100 * AUF
    else 0
    end AUF,
    From T4
    )
    T1

    Gruß und Dank im Voraus

    Tarki

  6. #6
    Registriert seit
    Feb 2001
    Beiträge
    20.695
    SELECT SUM(DECIMAL(STD * STS, 7, 2)) FROM FILE
    (select STS,
    case
    when RAB > 0
    then STS / 100 * RAB
    else 0
    end RAB,
    case
    when AUF > 0
    then STS / 100 * AUF
    else 0
    end AUF,
    From T4
    )
    T1

    Da fehlt nur ein neuer "case".
    Allerdings werden die von dir berechneten Felder RAB und AUF ja nicht verwendet.
    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

  7. #7
    Registriert seit
    Apr 2012
    Beiträge
    360
    leider bekomme ich noch immer eine Fehlermeldung.

    Muss man im Teil : From T4 nicht eine Datei angeben?

    Code:
    Nachrichten-ID . . . . :   SQL0104       Bewertung  . . . . . . :   30         
    Nachrichtenart . . . . :   Diagnose                                            
                                                                                   
    Nachricht . . . :   Token ( ungültig. Gültige Token: FOR SKIP WITH FETCH ORDER 
      UNION EXCEPT OPTIMIZE.

  8. #8
    Registriert seit
    Aug 2003
    Beiträge
    1.508
    Beim FROM FILE gehört das FILE weg.
    Das Select innerhalb der Klammer (Select ...) T1 ist das From.
    T1 ist somit eine temporäre Tabelle die du verwendest.

    SELECT SUM(DECIMAL(STD * STS, 7, 2)) FROM
    (select STS,
    case
    when RAB > 0
    then STS / 100 * RAB
    else 0
    end RAB,
    case
    when AUF > 0
    then STS / 100 * AUF
    else 0
    end AUF,
    From T4
    )
    T1

  9. #9
    Registriert seit
    Feb 2001
    Beiträge
    20.695
    Und hinter dem letzten "AUF" ist das Komma auch zu viel.
    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

  10. #10
    Registriert seit
    Apr 2012
    Beiträge
    360
    Ich stehe da voll auf den Schlauch.

    Wo gebe ich die Datei an oder muss ich über das Statement noch was darüberlegen?

  11. #11
    Registriert seit
    Feb 2001
    Beiträge
    20.695
    Deine Datei wird immer nach dem From angegeben, so ist das bei SQL.
    Mittels "from (...) Name" kreirst du eine sog. "derived Table", also ein Zwischenergebnis.

    Innerhalb der Klammern kodierst du also einen ganz normalen Select mit Feldbenamung für berechnete Felder, so dass du im übergeordneten Select diese Felder verwenden kannst.

    select f1, f2, ...
    from (
    select aa as f1, bb as f2 ...
    from MyTable
    ) NewName

    jetzt kommt es noch darauf an, was du mit dem ganzen machen willst.
    Einfacher ist es wirklich ohne derived Table, wenn die Felder nur 1 Mal benötig werden:

    select sum( STD * (STS - STS / 100.00 * RAB + AUF / 100.00 * AUF) )
    from MyFile

    Je nachdem wie dein Rabatt oder Aufschlag wirken soll, musst du halt deine Klammern setzen. Einen Case sehe ich da i.M. gar nicht.
    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

  12. #12
    Registriert seit
    Apr 2012
    Beiträge
    360
    Hat toll geklappt.

    Eine letzte Frage noch für Heute :

    Wieso bekomme ich bei diesem Statement eigentlich 4 Nachkommastellen angezeigt, obwohl ich alles mit 7, 2 angegeben habe?
    Code:
    SELECT Sum(STD * (STS - decimal(STS / 100.00 * RAB, 7,
    2) + decimal(STS / 100.00 * AUF, 7, 2) )) FROM FILE
    Gruß


    Tarki

Similar Threads

  1. RPGLE - SQL
    By christian_lettner in forum NEWSboard Programmierung
    Antworten: 2
    Letzter Beitrag: 16-11-06, 10:15
  2. SQL - Cursor vernichten ?!?
    By FNeurieser in forum NEWSboard Programmierung
    Antworten: 3
    Letzter Beitrag: 11-10-06, 14:53
  3. SQL und OBJLCK
    By malzusrex in forum IBM i Hauptforum
    Antworten: 8
    Letzter Beitrag: 19-09-06, 11:04
  4. SQL - Fehler
    By Kaufmann in forum IBM i Hauptforum
    Antworten: 11
    Letzter Beitrag: 28-06-06, 14:11
  5. SQL .. for update of (RPG embedded SQL)
    By loeweadolf in forum NEWSboard Programmierung
    Antworten: 2
    Letzter Beitrag: 01-06-06, 09:43

Berechtigungen

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