[NEWSboard IBMi Forum]

Hybrid View

  1. #1
    Registriert seit
    Feb 2001
    Beiträge
    20.696
    Um den case-Ausdruck nicht komplett zu wiederholen musst du das in eine CTE oder derived Table packen:

    select artikelnr , SUMME_TOT, "Davon A", ...
    "Davon A" / SUMME_TOT * 100.00, ...
    from (
    select artikelnr,sum(menge) SUMME_TOT,
    Sum(Case When Kennz = 'A' Then Menge Else 0 End) "Davon A",
    Sum(Case When Kennz = 'B' then Menge Else 0 End) "Davon B",
    Sum(Case When Kennz = 'C' then Menge Else 0 End) "Davon C"
    from File
    where Datum between x and y
    group by artikelnr
    )
    order by SUMME_TOT desc, artikelnr
    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

  2. #2
    Registriert seit
    Jan 2007
    Beiträge
    1.002
    Versteh ich das richtig, dass er mit dieser Formel immer 100 % bekommt? ;-)
    kf

  3. #3
    Registriert seit
    Aug 2006
    Beiträge
    47
    Hi Fuerchau,
    danke für die prompte Antwort.
    Ich bekomme allerdings die Fehlermeldung "Schlüsselwort BY nicht erwartet", wobei es sich dabei um das BY vom "Order by" handelt.

  4. #4
    Registriert seit
    Aug 2003
    Beiträge
    1.508
    select artikelnr , SUMME_TOT, "Davon A", ...
    "Davon A" / SUMME_TOT * 100.00, ...
    from (
    select artikelnr,sum(menge) SUMME_TOT,
    Sum(Case When Kennz = 'A' Then Menge Else 0 End) "Davon A",
    Sum(Case When Kennz = 'B' then Menge Else 0 End) "Davon B",
    Sum(Case When Kennz = 'C' then Menge Else 0 End) "Davon C"
    from File
    where Datum between x and y
    group by artikelnr
    ) Tab1
    order by SUMME_TOT desc, artikelnr

  5. #5
    Registriert seit
    Aug 2006
    Beiträge
    47
    Hi,
    JA, jetzt funktioniert es bestens; vielen Dank.

    Franz P.

  6. #6
    Registriert seit
    Feb 2001
    Beiträge
    20.696
    Wieso 100%?

    Z.B.:
    A / Tot * 100 = 350 / 5800 * 100.00 = 6,0344 %
    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
    Aug 2006
    Beiträge
    47
    Man muss nur die Formel umdrehen:
    Summe_A * 100.00 / Summe_TO

  8. #8
    Registriert seit
    Feb 2001
    Beiträge
    20.696
    Das gilt ggf. nur dann, wenn eine Integerdivision stattfand (Feld Menge ohne Nachkomma).
    Wenn du nur 100 statt 100.00 genommen hättest wäre das Ergebnis nämlich auch gleich.
    Mathematisch betrachtet ist das vollkommen egal.
    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

  9. #9
    Registriert seit
    Aug 2006
    Beiträge
    47
    Mathematisch ist es klarerweise ident; tatsächlich erhalte ich bei diesem SQL-Statement unterschiedliche Ergebnisse:

    Bei Summe_a*100 / Summe_tot erhalte ich die korrekten %

    Bei Summe_a/Summe_tot * 100 (egal, ob 100 oder 100.00) bekomme ich als Ergebnis entweder den Wert 100 oder den Wert 0

  10. #10
    Registriert seit
    Aug 2001
    Beiträge
    2.928
    Zitat Zitat von fpxx Beitrag anzeigen
    Mathematisch ist es klarerweise ident; tatsächlich erhalte ich bei diesem SQL-Statement unterschiedliche Ergebnisse:

    Bei Summe_a*100 / Summe_tot erhalte ich die korrekten %

    Bei Summe_a/Summe_tot * 100 (egal, ob 100 oder 100.00) bekomme ich als Ergebnis entweder den Wert 100 oder den Wert 0
    Das liegt daran, dass sowohl Summe_a als auch Summe_tot ganzzahlig (Integer) sind, oder als solche behandelt werden.

    Das Ergebnis einer Berechnung mit reinen Integer-Variablen oder Werten (unabhängig davon ob Division oder nicht) ergibt wieder einen Integer-Wert, d.h. etwaige Nachkommastellen werden abgeschnitten. So sind nun mal die Regeln!

    Summe_a * 100,00 ergibt keinen Integer-Wert, da 100 Dezimal-Positionen enthält und damit intern als Fließkomma interpretiert wird. Wenn dieses (interne Fließkomma-)Ergebnis dann durch einen Integer-Wert dividiert wird, ist das Ergebnis wiederum ein Fließkomma-Wert, d.h. Nachkommastellen werden berücksichtigt.

    Langer Rede kurzer Sinn, Du musst entweder Summe_a (oder Summe_Tot) explizit auf Decimal casten, oder Du stellst 100,0 an die erste oder zweite Stelle in Deiner Berechnung.

    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

  11. #11
    Registriert seit
    Feb 2001
    Beiträge
    20.696
    Statt cast reicht dann auch (der kaum verständliche)

    (a + 0.00) / b * 100.00
    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

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 - Fehler
    By Kaufmann in forum IBM i Hauptforum
    Antworten: 11
    Letzter Beitrag: 28-06-06, 14:11
  4. sql funktion
    By steven_r in forum NEWSboard Programmierung
    Antworten: 1
    Letzter Beitrag: 01-06-06, 12:16
  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
  •