[NEWSboard IBMi Forum]

Hybrid View

  1. #1
    cicero22 Besucher/Guest

    SQL Summenbildung abhängig von einem Kennzeichen

    Hallo Forum!

    Wir haben hier in einer Datenbank folgendes Problem:

    Es gibt keine Vorzeichen bei unseren Rechnungsbeträgen. Das bedeutet es gibt ein Gutschriftskennzeichen (KZGUT => Values 'J' , 'N') . Nun kann man dadurch eben nicht mal schnell mit SUM(RECHNUNUNGSBETRAG) eine Übersicht pro Tag oder Monat o.ä. fahren. (da eben alle Beträge positiv sind - auch die Gutschriften)

    Wir könnte man das Gutschriftskennzeichen (Gutschrift kann 'J' oder 'N' sein) mit abfragen um eine korrekte Summenbildung zu bilden? Das Ergebnis soll aber bitte in EINER Summe angezeigt werden - also nicht den GROUP auch auf das Gutschriftskennzeichen ausdehnen.


    SQL bisher:
    SELECT 'RECHNUNGSBETRAG',
    day(rechdat) , sum(WAWERTBT) FROM rechkopf WHERE
    month(RECHDAT) = 04 and year(rechdat) = 2004 GROUP BY day(rechdat)

    Danke für die Hilfe.

    Dirk

  2. #2
    Registriert seit
    Mar 2002
    Beiträge
    5.365
    Zitat Zitat von cicero22
    Hallo Forum!

    Wir haben hier in einer Datenbank folgendes Problem:

    Es gibt keine Vorzeichen bei unseren Rechnungsbeträgen. Das bedeutet es gibt ein Gutschriftskennzeichen (KZGUT => Values 'J' , 'N') . Nun kann man dadurch eben nicht mal schnell mit SUM(RECHNUNUNGSBETRAG) eine Übersicht pro Tag oder Monat o.ä. fahren. (da eben alle Beträge positiv sind - auch die Gutschriften)

    Wir könnte man das Gutschriftskennzeichen (Gutschrift kann 'J' oder 'N' sein) mit abfragen um eine korrekte Summenbildung zu bilden? Das Ergebnis soll aber bitte in EINER Summe angezeigt werden - also nicht den GROUP auch auf das Gutschriftskennzeichen ausdehnen.


    SQL bisher:
    SELECT 'RECHNUNGSBETRAG',
    day(rechdat) , sum(WAWERTBT) FROM rechkopf WHERE
    month(RECHDAT) = 04 and year(rechdat) = 2004 GROUP BY day(rechdat)

    Danke für die Hilfe.

    Dirk
    Hallo,

    das Zauberwort heißt CASE

    mfg

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

  3. #3
    cicero22 Besucher/Guest
    Hi!

    Ja - sowas in der Richtung dachte ich mir irgendwie - aber kannst Du VIELLEICHT? noch ein kleines Beispiel dafür abgeben? ....

    danke dirk

  4. #4
    Registriert seit
    Mar 2002
    Beiträge
    5.365
    Zitat Zitat von cicero22
    Hi!

    Ja - sowas in der Richtung dachte ich mir irgendwie - aber kannst Du VIELLEICHT? noch ein kleines Beispiel dafür abgeben? ....

    danke dirk
    Ich habe gerade keine Möhre oben, also aus dem Gedächtnis:

    select sum(u) from hugo
    (
    SELECT Feld1, Feld2,
    CASE
    WHEN STORNO = 'Y' THEN (-1) * UMSATZ
    WHEN STORNO = 'N' THEN UMSATZ
    END as u
    ) as hugo
    group by u

    ansonsten ist die SQL Referenz hier hilfreich, für das auffinden des Links zur Referenz gibt es hier im Forum Spezialisten...

    mfg

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

  5. #5
    Registriert seit
    Aug 2001
    Beiträge
    2.928

    Case

    Hallo Dirk,

    versuche mal das folgende:
    Code:
    SELECT 'RECHNUNGSBETRAG',  day(rechdat),                  
           sum(case when MyKZ = 'J'                           
                    then WAWERTBT                             
                    else WAWERTBT * -1                        
                    end)                                      
      FROM rechkopf WHERE                                     
      WHERE month(RECHDAT) = 04 and year(rechdat) = 2004      
      GROUP BY day(rechdat)
    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

  6. #6
    cicero22 Besucher/Guest
    Zitat Zitat von B.Hauser
    Hallo Dirk,

    versuche mal das folgende:
    Code:
    SELECT 'RECHNUNGSBETRAG',  day(rechdat),                  
           sum(case when MyKZ = 'J'                           
                    then WAWERTBT                             
                    else WAWERTBT * -1                        
                    end)                                      
      FROM rechkopf WHERE                                     
      WHERE month(RECHDAT) = 04 and year(rechdat) = 2004      
      GROUP BY day(rechdat)
    Birgitta
    Super super Stark an alle - vor allem Birgitta hat den Nagel VOLL auf den Kopf gehauen (ausser wir hatten lauter negativ Umsätze - Kennzeichen war falsch - aber das war natürlich eine winzigkeit und nur ein Versehen!)

    Danke an Alle!

  7. #7
    Registriert seit
    Apr 2003
    Beiträge
    24
    Hallo,

    alternativ kann man auch einen JOIN auf eine Hilfsdatei durchführen. Die Hilfsdatei muß zwei Datensätze enthalten, die den Kennzeichen N und J die Werte 1 und -1 zuordnen. Dann kann man einfach ausmultiplizieren.

    Das ist nicht unbedingt elegant, kann aber - auch bei Query - sehr hilfreich sein.

    Martin

  8. #8
    cicero22 Besucher/Guest
    Zitat Zitat von Martin
    Hallo,

    alternativ kann man auch einen JOIN auf eine Hilfsdatei durchführen. Die Hilfsdatei muß zwei Datensätze enthalten, die den Kennzeichen N und J die Werte 1 und -1 zuordnen. Dann kann man einfach ausmultiplizieren.

    Das ist nicht unbedingt elegant, kann aber - auch bei Query - sehr hilfreich sein.

    Martin
    Das ist gar nicht mal so dumm. Wow!
    Aber - wer kann mir nochmal ein CASE Beispiel beisteuern!

  9. #9
    Registriert seit
    Feb 2001
    Beiträge
    20.695
    sum(case kzgut when 'J' then ReBetrag else 0 - rebetrag end )
    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
    cicero22 Besucher/Guest
    Zitat Zitat von Fuerchau
    sum(case kzgut when 'J' then ReBetrag else 0 - rebetrag end )
    Dir natürlich auch recht herzlichen Dank Fuerchau - war ja die glatte Vorlage zum Tor!

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 .. for update of (RPG embedded SQL)
    By loeweadolf in forum NEWSboard Programmierung
    Antworten: 2
    Letzter Beitrag: 01-06-06, 09:43
  5. SQL - Verhältnis (%) bei Summenbildung errechnen
    By hzille in forum NEWSboard Programmierung
    Antworten: 2
    Letzter Beitrag: 01-09-04, 08:49

Berechtigungen

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