[NEWSboard IBMi Forum]
Seite 1 von 2 1 2 Letzte
  1. #1
    Registriert seit
    Aug 2006
    Beiträge
    47

    SQL-Anforderung

    Hi @ all,

    ich habe folgende Problemstellung.

    In einer Datei befinden sich u.a. die Felder Artikel-Nr., Datum, Menge, Kennz. (Inhalte "A", "B", "C")

    Ich benötige eine Aufstellung nach Artikel-Nr. in einem bestimmten Zeitraum, wobei das Ergebnis nach der Gesamtmenge absteigend sortiert werden soll und zusätzlich je Artikel die Mengen für die Kennzeichen A, B und C enthalten sein soll.

    Mit der Anweisung
    select artikelnr,sum(menge) SUMME_TOT from File where Datum between x and y group by artikelnr order by SUMME_TOT desc, artikelnr

    erhalte ich die gewünschte Sortierung und die Gesamtmenge.

    z.B.
    Artikel-Nr. Menge-Ges
    125 15000
    102 12000
    630 8500

    Wie muss ich diese Anweisung ergänzen, damit ich je Artikel als zusätzliche Spalten die Angaben "davon A", "davon B", "davon C"
    erhalte.

    Vielen Dank für Eure Bemühungen.

    Franz P.

  2. #2
    Registriert seit
    May 2002
    Beiträge
    1.121
    Das Kennzeichen in die Selectierung mit auf nehmen
    PHP-Code:
    select artikelnr,kennz sum(mengeSUMME_TOT 
    from File 
    where Datum between x 
    and 
    group by artikelnr
    kennz 
    order by SUMME_TOT desc
    artikelnr 

  3. #3
    Registriert seit
    Aug 2001
    Beiträge
    2.928
    Versuch's mal so:

    Code:
    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
    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

  4. #4
    Registriert seit
    Aug 2006
    Beiträge
    47
    Hab's so versucht und erfolgreich gewesen.

    Danke Birgitta

  5. #5
    Registriert seit
    Aug 2006
    Beiträge
    47
    Hallo Birgitta,
    wenn ich bei diesem SQL (auf Summen-Ebene) auch noch Prozentsätze haben möchte, wie muss ich dann vorgehen?
    Summe_TOT wäre die 100%-Basis und ich möchte zu den 3 durch Case bedingten Summen-Feldern (Davon A, Davon B und Davon C) die Prozentsätze bilden.
    Vielen Dank im Voraus.
    F.P.

  6. #6
    Registriert seit
    Feb 2001
    Beiträge
    20.695
    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

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

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

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

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

    Franz P.

  11. #11
    Registriert seit
    Feb 2001
    Beiträge
    20.695
    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

  12. #12
    Registriert seit
    Aug 2006
    Beiträge
    47
    Man muss nur die Formel umdrehen:
    Summe_A * 100.00 / Summe_TO

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
  •