[NEWSboard IBMi Forum]
  1. #1
    Registriert seit
    Sep 2005
    Beiträge
    385

    sql Tabelle, die sich in breite und länge vergrößert?

    Moin zusammen

    3 Dateien
    Geldeingang: mit key, Jahr, Monat, Betrag
    Basisdaten: mit Key, pool
    Pool mit Pool, Text

    ein
    PHP-Code:
    select BApoolmax(POBEZ), JAHRMONAT,  
            
    sum(Betrag
      
    from BAsisdatenpoolGeldeingang                
     where GEkey1 
    =BAkey1  AND 
           
    BApool popool                      
     group by BApool
    jahrMONAT            
     order by 1
    23
    bringt eine schöne Tabelle
    PHP-Code:
    Pool   Bezeichnung    Jahr   Monat    Betrag
    1        pool 1                2001   01         55
    ,00
    1        Pool 1                2001   02          47
    ,03
    ...
    1        pool 1                2019    03        17,11
    ...
    99       pool 99            2019    03          32,11 
    nun soll diese Ausgabe
    so werden
    PHP-Code:
    pool   Bezeichn.  2001/01   2001/02... 2001/12   2002/01 ...2019/03
      1       pool 1     55
    ,00     47,03     44,17      12,15     19,12
      2       pool 2     12
    ,55     48,90     53,17    155,03     41,17
     
    ...
      
    99     pool 99        77,28       13,55         18,97      41,22         32,11 

    und ab nächsten Monat ist die letzte Spalte 04/2019
    und warscheinlich der Pool 105 der letzte.

    Durch Umbuchungen in den Monaten und in den Pools ändern sich nahezu alle Werte, jeden Monat.

    Kann ich aus der 1. Auswertung (alles untereinander) die neue aufbauen?

    Danke

  2. #2
    Registriert seit
    Feb 2001
    Beiträge
    20.202
    Wenn ich jetzt die Frage verstehen würde...
    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

  3. #3
    Registriert seit
    Sep 2005
    Beiträge
    385
    Oh, na ja, die Frage ist, ob es ein SQL gibt, das diese Daten umbaut

    Soweit ich es mal gehört habe, hat SQL doch viele neue Funktionen um 'solche' Auswertungen zu machen. aber ich weis nicht einmal, wonach ich googeln soll!

  4. #4
    Registriert seit
    Feb 2001
    Beiträge
    20.202
    Das schon, aber "Spaltengenerierung" gehört da weniger dazu.
    Man muss (leider) immer die Spalten für die Tabelle vorher wissen um eine Abfrage auszuführen.
    Der SQL-Server stellt dafür eine Reihe von SP's (stored Procedures) zur Verfügung um Spalten dynamisch zu erfinden.
    Der Suchbegriff ist "Pivot" bzw. "unpivot", weil man letztendlich eine Pivot-Tabelle erstellt.

    Dein SQL kannst du ja (in php dynmaisch) so zusammenbauen:

    select BApool, max(POBEZ), JAHR
    ,sum(case when Monat = 1 then Betrag else null) "2001/01"
    ,sum(case when Monat = 2 then Betrag else null) "2001/02"
    ,sum(case when Monat = 3 then Betrag else null) "2001/03"
    ,sum(case when Monat = 4 then Betrag else null) "2001/04"
    from BAsisdaten, pool, Geldeingang
    where GEkey1
    =BAkey1 AND
    BApool = popool
    group by BApool
    , jahr
    order by 1
    , 2, 3


    Sowas lässt sich auch in einer SP dann als "dynmaische Tabelle" per Execute und return Cursor zusammenstoppeln.
    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
    Dec 2015
    Beiträge
    18
    ich habe zwar selber noch nicht mit der SQL-Funktion LISTAGG gearbeitet, aber die Beschreibung geht in die Richtung.

  6. #6
    Registriert seit
    Sep 2005
    Beiträge
    385
    Danke JotSo, nette Funktion

    Leider nicht so ganz das was ich brauche.
    Ich habe es mal versucht und Jahr/Monat sowie betrag in ein AlpaFeld selektiert und ausgegeben.
    Schon ne tolle sache!
    nur ist es kein 'feste' Tabelle so dass es nun so aussieht

    1 Pool 1 1/2010=138, 3/2010=155, 4/2010=188...
    2 Pool 2 2/2010=33, 4/2010=1214, 5/2010=21, ...

    es sollte aber wenigstens so

    Code:
    1  Pool 1  1/2010=138,           3/2010=155, 4/2010=188...
    2  Pool 2              2/2010=33,            4/2010=1214, 5/2010=21, ...
    aussehen.

  7. #7
    Registriert seit
    Dec 2015
    Beiträge
    18
    Hallo ILEMax,
    bestimmt gibt es dafür komfortablere Lösungen, ich würde aber spontan mal Folgendes testen: ich würde eine neue Datei machen, in der ich je Monate/Jahre einen Datensatz habe mit (nur ein Feld mit Inhalt 1/2010, 2/2010 etc.) alle hinterlege. Die joine ich mit den anderen Dateien (outer join). Für die fehlenden Monate in der Datei 'Geldeingang' bekommst Du den Null-Wert.
    Gruß JotSo

  8. #8
    Registriert seit
    Feb 2001
    Beiträge
    20.202
    Wenn du den SQL sowieso dynamisch aufbauen musst, was spricht da gegen meine Lösung?
    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. QOpenSys vermehrt sich
    By programmer400 in forum IBM i Hauptforum
    Antworten: 5
    Letzter Beitrag: 24-03-16, 14:55
  2. Rechenformeln aus Tabelle ?
    By loeweadolf in forum NEWSboard Programmierung
    Antworten: 5
    Letzter Beitrag: 20-01-14, 13:40
  3. Typ DATE in SQL-Tabelle
    By Melanie in forum IBM i Hauptforum
    Antworten: 5
    Letzter Beitrag: 13-02-03, 11:30
  4. EXCEL-Tabelle auf AS/400
    By Steven in forum IBM i Hauptforum
    Antworten: 12
    Letzter Beitrag: 25-10-02, 11:32
  5. Wer kennt sich mit CPYTOIMPF aus?
    By mott in forum IBM i Hauptforum
    Antworten: 7
    Letzter Beitrag: 02-05-02, 14:08

Berechtigungen

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