[NEWSboard IBMi Forum]
  1. #1
    Registriert seit
    Sep 2005
    Beitrge
    292

    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 schne 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 nchsten 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
    Beitrge
    17.978
    Wenn ich jetzt die Frage verstehen wrde...
    Dienstleistungen? Die gibt es hier: http://www.fuerchau.de
    Das Excel-AddIn: http://www.fuerchau.de/software/upload400.htm
    BI? Da war doch noch was: http://www.ftsolutions.de

  3. #3
    Registriert seit
    Sep 2005
    Beitrge
    292
    Oh, na ja, die Frage ist, ob es ein SQL gibt, das diese Daten umbaut

    Soweit ich es mal gehrt 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
    Beitrge
    17.978
    Das schon, aber "Spaltengenerierung" gehrt da weniger dazu.
    Man muss (leider) immer die Spalten fr die Tabelle vorher wissen um eine Abfrage auszufhren.
    Der SQL-Server stellt dafr eine Reihe von SP's (stored Procedures) zur Verfgung 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 lsst 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: http://www.fuerchau.de/software/upload400.htm
    BI? Da war doch noch was: http://www.ftsolutions.de

  5. #5
    Registriert seit
    Dec 2015
    Beitrge
    9
    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
    Beitrge
    292
    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
    Beitrge
    9
    Hallo ILEMax,
    bestimmt gibt es dafr komfortablere Lsungen, ich wrde aber spontan mal Folgendes testen: ich wrde 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). Fr die fehlenden Monate in der Datei 'Geldeingang' bekommst Du den Null-Wert.
    Gru JotSo

  8. #8
    Registriert seit
    Feb 2001
    Beitrge
    17.978
    Wenn du den SQL sowieso dynamisch aufbauen musst, was spricht da gegen meine Lsung?
    Dienstleistungen? Die gibt es hier: http://www.fuerchau.de
    Das Excel-AddIn: http://www.fuerchau.de/software/upload400.htm
    BI? Da war doch noch was: http://www.ftsolutions.de

hnliche Themen

  1. QOpenSys vermehrt sich
    Von programmer400 im Forum System i Hauptforum
    Antworten: 5
    Letzter Beitrag: 24-03-16, 13:55
  2. Rechenformeln aus Tabelle ?
    Von loeweadolf im Forum NEWSboard programmierung
    Antworten: 5
    Letzter Beitrag: 20-01-14, 12:40
  3. Typ DATE in SQL-Tabelle
    Von Melanie im Forum System i Hauptforum
    Antworten: 5
    Letzter Beitrag: 13-02-03, 10:30
  4. EXCEL-Tabelle auf AS/400
    Von Steven im Forum System i Hauptforum
    Antworten: 12
    Letzter Beitrag: 25-10-02, 10:32
  5. Wer kennt sich mit CPYTOIMPF aus?
    Von mott im Forum System i Hauptforum
    Antworten: 7
    Letzter Beitrag: 02-05-02, 13:08

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhnge hochladen: Nein
  • Beitrge bearbeiten: Nein
  •