[NEWSboard IBMi Forum]

Hybrid View

  1. #1
    Registriert seit
    Feb 2001
    Beiträge
    20.696
    Deine Beziehung (Join) gibst du beim Subselect ja eigentlich bereits an:

    SELECT A.HSEBUJH, A.HSESKTO, SUM(A.HSEBETR) AS SUMSKTO,
    DEC( SUM(A.HSEBETR) - (
    SELECT SUM(HSEBETR) FROM HSEM1 B
    WHERE B.HSEBUJH = A.HSEBUJH AND
    B.HSEHKTO = A.HSESKTO
    ), 12, 2) AS SALDO
    FROM HSEM1 A
    GROUP BY A.HSEBUJH, A.HSESKTO

    Also brauchst du das nur noch umbauen:

    SELECT A.HSEBUJH, A.HSESKTO, SUM(A.HSEBETR) AS SUMSKTO,
    DEC( SUM(A.HSEBETR) - SUM(B.HSEBETR)), 12, 2) AS SALDO
    FROM HSEM1 A, HSEM1.B
    WHERE B.HSEBUJH = A.HSEBUJH AND
    B.HSEHKTO = A.HSESKTO
    GROUP BY A.HSEBUJH, A.HSESKTO

    Wenn ich mir allerdings die Logik ansehe, müsste da eine 0-Summe rauskommen ?!
    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
    Jun 2005
    Beiträge
    10
    Dein Join führt ja zu einer „Satzverlängerung“ der „Primärdatei“ (A.HSEM1), indem nochmals der Satz (durch B.HSEM1) hintergehängt wird. D.h. jeder Satz der Datei A wird um jeden Satz der Datei B verlängert (n:n – Verknüpfung!)

    Für meine Beispieltabelle kommen in diesem Fall die folgenden Sätze heraus:

    A:_BUJH__SKTO_HKTO__BETR_B: BUJH__SKTO__HKTO_BETR

    ___2004____1_____2___ 10____ 2004____74_____1__60
    ___2004____1_____2___ 10____ 2004____14_____1__70
    ___2004____1_____2___ 10____ 2004____81_____1__80
    ___2004____1_____3___ 20____ 2004____74_____1__60
    ___2004____1_____3___ 20____ 2004____14_____1__70
    ___2004____1_____3___ 20____ 2004____81_____1__80
    ___2004____1____14___ 30____ 2004____74_____1__60
    ___2004____1____14___ 30____ 2004____14_____1__70
    ___2004____1____14___ 30____ 2004____81_____1__80
    ___2004____1_____2___ 40____ 2004____74_____1__60
    ___2004____1_____2___ 40____ 2004____14_____1__70
    ___2004____1_____2___ 40____ 2004____81_____1__80
    ___2004____1____31___ 50____ 2004____74_____1__60
    ___2004____1____31___ 50____ 2004____14_____1__70
    ___2004____1____31___ 50____ 2004____81_____1__80


    Summen für A.BETR 450 Summe für B.BETR 1050
    Macht Saldo -600

    Wie Du siehst, ergäben sich falsche Summen!
    (Soll-Summen wären eigentlich A.BETR = 150 und B.BETR = 210)

    Problem:
    Summe 1 (n Sätze mit Feld SKTO = 1)
    Summe 2 (n Sätze, ganz andere, mit Feld HKTO = 1)

    Beide Summen resultieren zwar aus demselben Feld (BETR), aber eben aus ganz unterschiedlichen Zeilen.

    Das Thema ist wirklich furchtbar schwer zu erklären!!!

  3. #3
    Registriert seit
    Feb 2001
    Beiträge
    20.696
    ???
    Wenn du den Select anschaust gibt es 2 Beziehungen (inner Join):

    WHERE B.HSEBUJH = A.HSEBUJH AND B.HSEHKTO = A.HSESKTO

    Es gibt also eine 1:1 Beziehung zwischen Jahr UND Konten, also genauso wie in deinem ursprünglichen Select !
    Wenn diese Beziehung nicht ausreicht, musst du zusätzliche Beziehungen herstellen (weitere AND-Bedingung).
    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

  4. #4
    Registriert seit
    Feb 2001
    Beiträge
    20.696
    Ich muss mich berichtigen, du hast ja Recht !
    Da es auf jedem Konto mehrere Buchungen gibt, gibt es diese N:N-Beziehung.

    Ab V5 gibt es folgende Möglichkeit:

    with
    xSoll as ( -- Summe Soll nach Jahr/Konto
    SELECT HSEBUJH, HSESKTO, SUM(HSEBETR) AS SUMSKTO
    FROM HSEM1
    GROUP BY HSEBUJH, HSESKTO
    )
    ,
    xHaben as ( -- Summe Haben nach Jahr/Konto
    SELECT HSEBUJH, HSEHKTO, SUM(HSEBETR) AS SUMHKTO
    FROM HSEM1
    GROUP BY HSEBUJH, HSEHKTO
    )
    select a.*, b.*, SUMHKTO - SUMSKTO from
    xsoll a, xhaben b
    WHERE B.HSEBUJH = A.HSEBUJH AND
    B.HSEHKTO = A.HSESKTO
    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

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

    View

    Hallo,

    hier noch ein anderer Vorschlag, vielleicht ist es das was Du suchst:

    PHP-Code:
    create view qtemp/Myview1 as                                  
    with s as (select hsebujhhseskto as Kto,                    
                      
    Sum(hseeswu) as Sollsum(0) as Haben,      
                      
    Sum(hseeswu) as Saldo                       
                  from hsem1                                      
                  where hseskto 
    <> ' '                            
                  
    Group by hsebujhhseskto),                     
         
    as (select hsebujhhsehkto as kto,                    
                      
    Sum(0) as Sollsum(hseeswu) as Haben,      
                      
    Sum(-hseeswu) as saldo                      
                     from hsem1                                   
                     where hsehkto 
    <> ' '                         
                     
    Group by hsebujhhsehkto),                  
         
    as (Select from s                                    
               Union                                              
               Select 
    from h)                                   
    select hsebujhktosum(soll) as soll,                       
                         
    sum(haben) as habensum(saldo) as saldo  
    from t                                                         
    group by hsebujh
    kto 
    @Fuerchau: Common Table Expressions (CTEs) werden schon seit Release V4R4 unterstützt.
    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
    Registriert seit
    Jun 2005
    Beiträge
    10
    Guten Morgen ihr Beiden,

    tut mir leid, dass ich mich jetzt erst zurückmelde! Aber hatte bisher noch keine Zeit.

    Mittlerweile habe ich mir Eure Tipps angesehen, ausprobiert und bin hellauf begeistert. Wunderbar!!! Das "WITH" ist genau das, was ich gesucht habe!

    Vielen Dank für Eure Geduld und Hilfe!!!

    Viele Grüße

    Akku

Similar Threads

  1. Antworten: 11
    Letzter Beitrag: 18-07-16, 09:49
  2. AS400 auf SQL Server
    By DEVJO in forum IBM i Hauptforum
    Antworten: 7
    Letzter Beitrag: 12-10-06, 18:28
  3. sql select mit zusätzl. Feldern
    By rr2001 in forum IBM i Hauptforum
    Antworten: 2
    Letzter Beitrag: 07-07-06, 09:56
  4. Cobol-Programm mit Embedded SQL (SELECT CASE)
    By klausgkv in forum NEWSboard Programmierung
    Antworten: 8
    Letzter Beitrag: 08-06-06, 13:47
  5. SQL -> CREATE VIEW
    By Kaufmann in forum IBM i Hauptforum
    Antworten: 17
    Letzter Beitrag: 11-05-06, 14:57

Berechtigungen

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