[NEWSboard IBMi Forum]
Seite 1 von 2 1 2 Letzte
  1. #1
    Registriert seit
    Apr 2012
    Beiträge
    360

    Sql Summen bilden 2.Teil

    Hallo,

    ich hätte gerne von der Datei FILE1, alle Vorgabezeiten distinct(F01GNR, F01TNR und F01ZNR) summiert.

    Diese 3 Felder ergeben einen Arbeitsschritt mit einer Vorgabezeit.
    Jeder Mitarbeiter kann einen Key/Arbeitsschritt der schon angestempelt wurde auch anstempeln.

    Mein Problem ist das ich keine korrekte Summe über die gesamten Vorgabezeiten eines Auftrages bekomme.

    In der Datei File2 stehen die gestempelten Arbeitszeiten.

    Könnt ihr mir bitte helfen?

    Code:
    WITH 
    X AS 
    (SELECT F01AUF, F01FNR, F01PNR, 
    SUM(distinct(F01VZT)) F01VZT 
    FROM FILE1 
    GROUP BY F01AUF, F01FNR, F01PNR), 
    Y AS (SELECT  
    F02AUF, F02FNE, F02PNR, F02DAT, 
    SUM(F02MIN) F02MIN 
    FROM FILE2 
    GROUP BY F02AUF, F02FNE, F02PNR, F02DAT) 
    
    SELECT     
    SUM(F02MIN), SUM(F01VZT) FROM X,Y 
    WHERE F01AUF = F02AUF AND F02FNE =       
    F01FNR AND F02PNR = F01PNR AND      
    F01AUF = 55523 and F02AUF = F01AUF  
    
    F01GNR         2  0       TEXT('Gruppennummer')
    F01TNR         4  0       TEXT('Textnummer')   
    F01ZNR         2  0       TEXT('Zeilennummer') 
    F01VZT         5  0       TEXT('Vorgabezeit')

  2. #2
    Registriert seit
    Apr 2012
    Beiträge
    360
    Ist es eigentlich möglich, wenn ich die 4 Felder concate, dass ich die Summe von den Vorgabezeiten bekomme?

    Habe einige Varianten ausprobiert, aber erhalte nicht die korrekten Daten.

    Oder muss ich das programmiermäßig erledigen?

    Danke und Gruß

    Code:
    WITH X AS(                                                   
    SELECT F01VZT,                                               
    DISTINCT (DIGITS(F01GNR) CONCAT DIGITS(F01TNR) CONCAT       
    DIGITS(F01ZNR) CONCAT DIGITS(F01VZT)) AS XXX 
    FROM FILE1 WHERE F01AUF = 55523       
    GROUP BY KWEVZT, XXX)                                        
                                                                 
    SELECT                                                       
    SUM(F01VZT) FROM X           
    
    F01GNR         2  0       TEXT('Gruppennummer')
    F01TNR         4  0       TEXT('Textnummer')   
    F01ZNR         2  0       TEXT('Zeilennummer') 
    F01VZT         5  0       TEXT('Vorgabezeit')

  3. #3
    Registriert seit
    Aug 2003
    Beiträge
    1.508
    Hallo,
    kannst du ein Beispiel schicken, welche Daten du hast und was du dir für ein Ergebnis erwartest.
    In deinem Beispiel verwendest du auch DISTINCT. Damit fehlen dir eventuell einige Sätze für die Summe.

    lg Andreas

  4. #4
    Registriert seit
    Apr 2012
    Beiträge
    360
    ich habe Buchungen im FILE1.
    Der Key für die Buchung besteht aus 3 numerischen Feldern:
    F01GNR 2 0
    F01TNR 4 0
    F01ZNR 2 0

    Ich bräuchte die 3 Felder Distinct um jeweils nur einmal die Vorgabezeit(eigentlich die höchste) zu erhalten.

    Ich habe jetzt versucht die 3 Keyfelder zusammenzufügen und die Summe zusätzlich.
    Anschließend hätte ich mir gedacht das ich evtl. mit Substr die Summen der Vorgabezeiten erstellen kann.

    Bin beim googlen ob das überhaupt so funktionieren kann.

    Hast du vielleicht einen besseren Ansatz?


    Gruß

    Tarki

  5. #5
    Registriert seit
    Aug 2003
    Beiträge
    1.508
    Ich bin mir noch immer nicht sicher dich richtig verstanden zu haben.
    Eventuell suchst du sowas?!:

    Code:
    Select distinct F01GNR concat F01TNR concat F01ZNR
    from (
    Select F01GNR, F01TNR, max (F01ZNR) F01ZNR
    from xyz
    group by f01gnr, f01tnr
    ) t1
    Ansonsten schreib bitte mal ein paar Beispiel Sätze wie sie in der Tabelle stehen und dann wie die Sätze im Ergebnis aussehen sollen.

    Ansonsten wünsch ich noch eine nicht all zu lange Nacht

  6. #6
    Registriert seit
    Apr 2012
    Beiträge
    360
    Das sind Buchungen zu einem Auftrag.

    Code:
    SEQ  GNR  TNR ZNR VGZT   PNR
      1   90  100   1    8   405 
      2   16  400   2  120   444 
      3   16  400   1  120   444 
      4   19  500   3  240   405 
      5   19  500   4   75   444 
      6   19  500   3  240   510 
      7   24    1   1  120   601 
      8   34  100   2   75   405 
      9   34  100  12   15   405 
     10   34  200   1   48   444

    Ich möchte hier die gesamte Vorgabezeit(VGZT) ermitteln.
    In diesem Auftrag haben die Penr 405 und 510 gemeinsam auf einer Tätigkeit gearbeitet.
    Ich erhalte bei meiner Abfrage immer die Vorgabezeit von seq 4 und 6.
    Die sollte er nur einmal summieren, dh. das distinct über die 3 Felder.

    Sollte ein Arbeitsschritt (GNR, TNR, ZNR) mehrfach vorkommen, dann bräuchte ich die größte Vorgabezeit von diesen Arbeitsschritten.

    Gruß und Gute Nacht.

    Tarki

  7. #7
    Registriert seit
    Aug 2001
    Beiträge
    2.928
    Meinst Du sowas?

    Code:
    Select  GNR, TNR, ZNR, Max(VGZT)
       from  YourFile
       Group By GNR, TNR, ZNR
    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

  8. #8
    Registriert seit
    Aug 2003
    Beiträge
    1.508
    Gut, jetzt wissen wir schon mal wie die Quelle aussieht. Jetzt versteh ich das schon besser.
    Kannst du bitte auch noch das Ergebnis posten, welches du dir für diese Quelle vorstellst.
    Das würde uns (oder zumindest mir) sicher auch noch Helfen.

  9. #9
    Registriert seit
    Apr 2012
    Beiträge
    360
    Morgen,

    das Statement von Frau Hauser bekomme ich schon die richtigen Einzeldaten.
    Code:
    Select  GNR, TNR, ZNR, Max(VGZT)
       from  YourFile
       Group By GNR, TNR, ZNR
    aber wie kann ich da die gesamten Summen über VGZT bilden?

    Dachte mir das das so funktionieren müsste:
    Code:
    Select SUM(VGZT) from (
    Select  GNR, TNR, ZNR, Max(VGZT)
       from  YourFile
       Group By GNR, TNR, ZNR)
    as X
    aber bekomme da die Meldung:
    Spalte VGZT nicht in angegebenen Tabellen.

    Was mache ich da schon wieder falsch?

  10. #10
    Registriert seit
    Aug 2001
    Beiträge
    2.928
    Du musst dem Kind Max(VGZT) einen Namen geben und diesen verwenden.

    Ich würde an dieser Stelle auch keinen Sub-Select verwenden sondern eine CTE (Common Table Expression) vorziehen. Verschachtelte Sub-Selects werden schnell unüberschaubar.

    Code:
    With x as (Select GNR, TNR, ZNR, Max(VGZT) MaxVGZT
                 From YourFile
                 Group By GNR, TNR, ZNR)
    Select Sum(MaxVGZT)
    From X;
    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

  11. #11
    Registriert seit
    Apr 2012
    Beiträge
    360
    Danke Andreas und Birgitta für eure Hilfe.

  12. #12
    Registriert seit
    Apr 2012
    Beiträge
    360
    Zitat Zitat von B.Hauser Beitrag anzeigen
    Du musst dem Kind Max(VGZT) einen Namen geben und diesen verwenden.

    Ich würde an dieser Stelle auch keinen Sub-Select verwenden sondern eine CTE (Common Table Expression) vorziehen. Verschachtelte Sub-Selects werden schnell unüberschaubar.

    Code:
    With x as (Select GNR, TNR, ZNR, Max(VGZT) MaxVGZT
                 From YourFile
                 Group By GNR, TNR, ZNR)
    Select Sum(MaxVGZT)
    From X;
    Birgitta
    Hallo Brigitta,

    wenn ich noch die 2 anderen Felder dazufüge seq und Pnr verfälscht das mein Ergebnis(1061).

    Die richtigen Minuten sind 821.

    Gibt es da noch eine Möglichkeit diese Statement zu verfeinern?

Similar Threads

  1. Sql Summen bilden
    By tarkusch in forum IBM i Hauptforum
    Antworten: 11
    Letzter Beitrag: 03-12-12, 15:24
  2. RPGLE - SQL
    By christian_lettner in forum NEWSboard Programmierung
    Antworten: 2
    Letzter Beitrag: 16-11-06, 10:15
  3. SQL - Cursor vernichten ?!?
    By FNeurieser in forum NEWSboard Programmierung
    Antworten: 3
    Letzter Beitrag: 11-10-06, 14:53
  4. SQL - Fehler
    By Kaufmann in forum IBM i Hauptforum
    Antworten: 11
    Letzter Beitrag: 28-06-06, 14:11
  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
  •