[NEWSboard IBMi Forum]
Seite 1 von 2 1 2 Letzte
  1. #1
    Registriert seit
    May 2004
    Beiträge
    184

    Erstellen einer View

    Hallo Kollegen,

    ich habe da ein Problem, vielleicht kann mir einer helfen. Ich möchte eine View aus 2 Tabellen erstellen soweit so gut.
    Die View soll nur die Artikelnr, Filiale und die Summe(Menge) aus allen beiden Tabellen enthalten.

    Leider habe ich in der Tabelle2 einige Datensätze dies es nicht in der Tabelle1 gibt, die dann aber trotzdem in der View enthalten sein sollen.

    Auch wenn ich die beiden Tabellen verknüpfe, wird die Summe der Menge gleichen Artikelnr mehrfach summiert.

    Wir haben V7R1 im Einsatz

    Vielen Dank im Voraus
    Jenne
    Tabelle1
    Artikelnr Filiale Menge
    100 1 10
    100 2 10
    100 1 20
    200 1 30
    300 2 5


    Tabelle2
    Artikelnr Filiale Menge
    100 1 10
    100 1 10
    200 2 20
    400 3 30
    500 1 5

  2. #2
    Registriert seit
    Aug 2001
    Beiträge
    2.877
    Du meinst, Du willst beide Tabellen zusammenmischen?
    Das SQL Statement müsste etwa so lauten

    Code:
    Create View Schema/View
    as (Select ArtikelNr, Filiale, Sum(Menge) Menge
            from (   Select  ArtikelNr, Filiale, Menge
                          From Tabelle1
                  Union All
                     Select  ArtikelNr, Filiale, Menge
                        From Tabelle2) x
            Group By ArtikelNr, Filiale)
    Birgitta Hauser

    Anwendungsmodernisierung, Beratung, Schulungen, Programmierung im Bereich RPG, SQL und Datenbank
    IBM Champion seit 2020 - 4. Jahr in Folge
    Birgitta Hauser - Modernization - Education - Consulting on IBM i

  3. #3
    Registriert seit
    May 2004
    Beiträge
    184
    Hallo B.Hauser,

    irgendwo habe ich einen Fehler denn ich aber nicht finde. Ich sende einmal mein Originalstatement:

    PHP-Code:
    CREATE VIEW art_reserv                                              
    (MANDANT_NRFILIAL_NRZENTRAL_NRMENGE)                          
    AS (
    SELECT AUF_DEFA.MANDANT_NRAUF_POS_ZW.FILIAL_NR,               
     
    AUF_POS_ZW.ZENTRAL_NR SUMAUF_POS_ZW.BESTELLMENGE -             
     
    AUF_POS_ZW.FEHLMENGE auf_msv3.liefermenge )                      
     
    from (select AUF_DEFA.MANDANT_NRAUF_POS_ZW.FILIAL_NR,            
    AUF_POS_ZW.ZENTRAL_NR ,                                             
      
    AUF_POS_ZW.BESTELLMENGE AUF_POS_ZW.FEHLMENGE                    
     from auf_defa
    AUF_POS_ZW,AUF_KO_ZW                                
     WHERE AUF_DEFA
    .MANDANT_NR AUF_KO_ZW.MANDANT_NR AND               
     
    AUF_DEFA.FILIAL_NR =                                               
      
    AUF_KO_ZW.FILIAL_NR AND AUF_DEFA.ARS_AUFTRAG_NR =                 
      
    AUF_KO_ZW.ARS_AUFTRAG_NR AND AUF_DEFA.STATUS_KEZ ' ' AND        
      
    AUF_DEFA.MANDANT_NR AUF_POS_ZW.MANDANT_NR AND                   
      
    AUF_DEFA.ARS_AUFTRAG_NR AUF_POS_ZW.ARS_AUFTRAG_NR AND (         
      
    AUF_POS_ZW.BESTELLMENGE AUF_POS_ZW.FEHLMENGE ) <> AND         
      
    AUF_POS_ZW.SATZ_KEZ <> 'T'                                       
     
    union all Select auf_msv3.mandant_nr.                              
      
    auf_msv3.filial_nrAuf_msv3.zentral_nrauf_msv3.liefermenge from
      auf_msv3
    x                                                       
     GROUP BY AUF_DEFA
    .MANDANT_NRAUF_POS_ZW.FILIAL_NR,                
      
    AUF_POS_ZW.ZENTRAL_NR
    Gruß
    Jenne

  4. #4
    Registriert seit
    Aug 2001
    Beiträge
    2.877
    Nach SELECT auf_msv3.mandant darf kein Punkt, sondern muss ein Komma folgen.

    Warum muss alles in einer View sein?
    Erstelle für die Verknüpfung jeweils eigene Views und packe diese schließlich in eine gemeinsame View.
    Views können innerhalb von Views wie Tabellen oder physische Dateien verwendet werden.

    Birgitta
    Birgitta Hauser

    Anwendungsmodernisierung, Beratung, Schulungen, Programmierung im Bereich RPG, SQL und Datenbank
    IBM Champion seit 2020 - 4. Jahr in Folge
    Birgitta Hauser - Modernization - Education - Consulting on IBM i

  5. #5
    Registriert seit
    May 2004
    Beiträge
    184
    Danke B. Hauser Du hast natürlich recht.

    Jetzt kommt aber "Spaltenanzahl unterschiedlich. Das verstehe ich ja noch.
    Weil ich AUF_POS_ZW.BESTELLMENGE , AUF_POS_ZW.FEHLMENGE eingegeben habe.
    Wenn ich aber dafür
    sum(AUF_POS_ZW.BESTELLMENGE - AUF_POS_ZW.FEHLMENGE)

    eingebe, dann kommt:

    "Spalte MANDANT_NR oder Ausdruck in SELECT-Liste nicht gültig."

    Gruß
    Jenne





  6. #6
    Registriert seit
    Aug 2001
    Beiträge
    2.877
    Du hast den Sub-Select mit der Union-Anweisung auch x genannt.
    Wenn Du Deine Spalten im endgültigen SELECT qualifizieren willst, musst Du auch x. verwenden und nicht irgendwas anderes. Um sicher zustellen, dass die Spalten den gleichen Namen haben solltest Du die Namen festlegen. Entweder nach x, z.B. x (Filiale, ArtikelNr, Menge)

    Im endgültigen SELECT-Statement muss dann x.Filiale (oder einfach nur Filiale) etc. verwendet werden.

    Birgitta
    Birgitta Hauser

    Anwendungsmodernisierung, Beratung, Schulungen, Programmierung im Bereich RPG, SQL und Datenbank
    IBM Champion seit 2020 - 4. Jahr in Folge
    Birgitta Hauser - Modernization - Education - Consulting on IBM i

  7. #7
    Registriert seit
    May 2004
    Beiträge
    184
    Hallo Britta,

    im Endgültigen Select kommt aber nicht die Feherlmeldung:

    "Spalte MANDANT_NR oder Ausdruck in SELECT-Liste nicht gültig."

    sondern im Subselect :
    PHP-Code:
    CREATE VIEW art_reserv                                              
    (MANDANT_NRFILIAL_NRZENTRAL_NRMENGE)                          
    AS (
    SELECT    AUF_DEFA.MANDANT_NRAUF_POS_ZW.FILIAL_NR,            
     
    AUF_POS_ZW.ZENTRAL_NR SUMAUF_POS_ZW.BESTELLMENGE -             
     
    AUF_POS_ZW.FEHLMENGE auf_msv3.liefermenge )                      
     
    from (select AUF_DEFA.MANDANT_NRAUF_POS_ZW.FILIAL_NR,            
     
    AUF_POS_ZW.ZENTRAL_NR ,sum(                                         
     
    AUF_POS_ZW.BESTELLMENGE  AUF_POS_ZW.FEHLMENGE)                  
     
    from auf_defaAUF_POS_ZW,AUF_KO_ZW                                
     WHERE AUF_DEFA
    .MANDANT_NR AUF_KO_ZW.MANDANT_NR AND               
     
    AUF_DEFA.FILIAL_NR =                                               
      
    AUF_KO_ZW.FILIAL_NR AND AUF_DEFA.ARS_AUFTRAG_NR =                 
      
    AUF_KO_ZW.ARS_AUFTRAG_NR AND AUF_DEFA.STATUS_KEZ ' ' AND        
      
    AUF_DEFA.MANDANT_NR AUF_POS_ZW.MANDANT_NR AND                   
      
    AUF_DEFA.ARS_AUFTRAG_NR AUF_POS_ZW.ARS_AUFTRAG_NR AND (         
      
    AUF_POS_ZW.BESTELLMENGE AUF_POS_ZW.FEHLMENGE ) <> AND         
     
    union all Select auf_msv3.mandant_nr,                              
      
    auf_msv3.filial_nrAuf_msv3.zentral_nrauf_msv3.liefermenge from
      auf_msv3
    )                                                         
      
    (MANDANTFILIALEPZNMENGE)                                  
     
    GROUP BY auf_defa.MANDANT_NRAUF_POS_ZW.FILIAL_NR,                
      
    AUF_POS_ZW.ZENTRAL_NR
    Ich weiß nicht wo der Fehler sitzt!!!!

    Könntest Du mir das einmal farblich markieren?

    Gruß
    Jenne

  8. #8
    Registriert seit
    Feb 2001
    Beiträge
    20.253
    Zitat Zitat von Jenne Beitrag anzeigen
    Hallo Britta,

    im Endgültigen Select kommt aber nicht die Feherlmeldung:

    "Spalte MANDANT_NR oder Ausdruck in SELECT-Liste nicht gültig."

    sondern im Subselect :
    PHP-Code:
    CREATE VIEW art_reserv                                              
    (MANDANT_NRFILIAL_NRZENTRAL_NRMENGE)                          
    AS (
    SELECT    AUF_DEFA.MANDANT_NRAUF_POS_ZW.FILIAL_NR,            
     
    AUF_POS_ZW.ZENTRAL_NR SUMAUF_POS_ZW.BESTELLMENGE -             
     
    AUF_POS_ZW.FEHLMENGE auf_msv3.liefermenge )                      
     
    from (select AUF_DEFA.MANDANT_NRAUF_POS_ZW.FILIAL_NR,            
     
    AUF_POS_ZW.ZENTRAL_NR ,sum(                                         
     
    AUF_POS_ZW.BESTELLMENGE  AUF_POS_ZW.FEHLMENGE)                  
     
    from auf_defaAUF_POS_ZW,AUF_KO_ZW                                
     WHERE AUF_DEFA
    .MANDANT_NR AUF_KO_ZW.MANDANT_NR AND               
     
    AUF_DEFA.FILIAL_NR =                                               
      
    AUF_KO_ZW.FILIAL_NR AND AUF_DEFA.ARS_AUFTRAG_NR =                 
      
    AUF_KO_ZW.ARS_AUFTRAG_NR AND AUF_DEFA.STATUS_KEZ ' ' AND        
      
    AUF_DEFA.MANDANT_NR AUF_POS_ZW.MANDANT_NR AND                   
      
    AUF_DEFA.ARS_AUFTRAG_NR AUF_POS_ZW.ARS_AUFTRAG_NR AND (         
      
    AUF_POS_ZW.BESTELLMENGE AUF_POS_ZW.FEHLMENGE ) <> AND         
     
    union all Select auf_msv3.mandant_nr,                              
      
    auf_msv3.filial_nrAuf_msv3.zentral_nrauf_msv3.liefermenge from
      auf_msv3
    )                                                         
      
    (MANDANTFILIALEPZNMENGE)                                  
     
    GROUP BY auf_defa.MANDANT_NRAUF_POS_ZW.FILIAL_NR,                
      
    AUF_POS_ZW.ZENTRAL_NR
    Ich weiß nicht wo der Fehler sitzt!!!!

    Könntest Du mir das einmal farblich markieren?

    Gruß
    Jenne
    Das AND vor UNION ist zuviel.
    Mit Union leitest du einen neuen Select ein.
    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

  9. #9
    Registriert seit
    May 2004
    Beiträge
    184
    Zitat Zitat von Fuerchau Beitrag anzeigen
    Das AND vor UNION ist zuviel.
    Mit Union leitest du einen neuen Select ein.
    Sorry hatte die folgende Zeile nicht mit kopiert:
    "AUF_POS_ZW.SATZ_KEZ <> 'T'"

    jetzt ergibt auch das "and" einen Sinn.

    Kannst Du jetzt bitte noch einmal schauen?

    Gruß
    Jenne

  10. #10
    Registriert seit
    Feb 2001
    Beiträge
    20.253
    Bei der Umformatierung wird es deutlicher:

    CREATE VIEW art_reserv
    (
    MANDANT_NR,
    FILIAL_NR,
    ZENTRAL_NR,
    MENGE)

    AS (

    SELECT
    AUF_DEFA.MANDANT_NR,
    AUF_POS_ZW.FILIAL_NR,
    AUF_POS_ZW.ZENTRAL_NR ,

    SUM( AUF_POS_ZW.BESTELLMENGE - AUF_POS_ZW.FEHLMENGE + auf_msv3.liefermenge )

    from (

    select
    AUF_DEFA.MANDANT_NR,
    AUF_POS_ZW.FILIAL_NR,
    AUF_POS_ZW.ZENTRAL_NR ,

    -- Hier befindest du dich auf Einzelsatzebene daher ist "sum" zuviel!!!
    sum(
    AUF_POS_ZW.BESTELLMENGE - AUF_POS_ZW.FEHLMENGE)

    from auf_defa, AUF_POS_ZW, AUF_KO_ZW

    WHERE
    AUF_DEFA.MANDANT_NR = AUF_KO_ZW.MANDANT_NR
    AND AUF_DEFA.FILIAL_NR = AUF_KO_ZW.FILIAL_NR
    AND AUF_DEFA.ARS_AUFTRAG_NR = AUF_KO_ZW.ARS_AUFTRAG_NR
    AND AUF_DEFA.STATUS_KEZ = ' '
    AND AUF_DEFA.MANDANT_NR = AUF_POS_ZW.MANDANT_NR
    AND AUF_DEFA.ARS_AUFTRAG_NR = AUF_POS_ZW.ARS_AUFTRAG_NR
    AND (AUF_POS_ZW.BESTELLMENGE - AUF_POS_ZW.FEHLMENGE ) <> 0
    AND AUF_POS_ZW.SATZ_KEZ <> 'T'

    union all

    Select

    auf_msv3.mandant_nr,
    auf_msv3.filial_nr,
    Auf_msv3.zentral_nr,
    auf_msv3.liefermenge
    from auf_msv3

    )
    x (MANDANT, FILIALE, PZN, MENGE)
    GROUP BY
    auf_defa.MANDANT_NR,
    AUF_POS_ZW.FILIAL_NR,
    AUF_POS_ZW.ZENTRAL_NR
    )
    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

  11. #11
    Registriert seit
    May 2004
    Beiträge
    184
    Hallo Britta, hallo Fürchau,

    klasse....! Dank Euch beiden hat es jetzt geklappt.

    PHP-Code:
    CREATE VIEW art_reserv 
    MANDANT_NRFILIAL_NRZENTRAL_NRMENGE)  
    AS 
    SELECT x.mandantx.filialex.pzn SUMx.menge
    from select AUF_DEFA.MANDANT_NRAUF_POS_ZW.FILIAL_NR,                   
    AUF_POS_ZW.ZENTRAL_NR , ( AUF_POS_ZW.BESTELLMENGE -                 
    AUF_POS_ZW.FEHLMENGE
    from 
    auf_defa
    AUF_POS_ZWAUF_KO_ZW 
    WHERE    
    AUF_DEFA
    .MANDANT_NR AUF_KO_ZW.MANDANT_NR AND AUF_DEFA.FILIAL_NR 
    AUF_KO_ZW.FILIAL_NR AND AUF_DEFA.ARS_AUFTRAG_NR =                   
    AUF_KO_ZW.ARS_AUFTRAG_NR AND AUF_DEFA.STATUS_KEZ ' ' AND          
    AUF_DEFA.MANDANT_NR AUF_POS_ZW.MANDANT_NR AND                     
    AUF_DEFA.ARS_AUFTRAG_NR AUF_POS_ZW.ARS_AUFTRAG_NR AND             
    (
    AUF_POS_ZW.BESTELLMENGE AUF_POS_ZW.FEHLMENGE ) <> AND          
    AUF_POS_ZW.SATZ_KEZ <> 'T' 
    union all 
    Select auf_msv3
    .mandant_nr,    
    auf_msv3.filial_nrAuf_msv3.zentral_nrauf_msv3.liefermenge 
    from auf_msv3 where auf_msv3
    .liefermenge <> and AUF_MSV3.ERLEDIGT
    _KEZ 
    ' '
    (MANDANTFILIALEPZNMENGE
    GROUP BY               
    x
    .mandantx.filialex.pzn 
    Gruß
    Jenne

  12. #12
    Registriert seit
    Nov 2003
    Beiträge
    2.309
    Wer ist Britta?

Similar Threads

  1. Erstellen einer STMF mittels CL-Programm
    By systemer in forum IBM i Hauptforum
    Antworten: 7
    Letzter Beitrag: 19-02-03, 08:33
  2. Savf von einer Bibliothek erstellen
    By Sascha Storzum in forum IBM i Hauptforum
    Antworten: 2
    Letzter Beitrag: 06-01-03, 14:04
  3. Antworten: 1
    Letzter Beitrag: 17-10-02, 13:32
  4. Nicht funktionierenden View löschen
    By Burgy Zapp in forum IBM i Hauptforum
    Antworten: 2
    Letzter Beitrag: 06-03-02, 14:38
  5. Virtuelle Spalten im VIEW auf NULL
    By KB in forum IBM i Hauptforum
    Antworten: 0
    Letzter Beitrag: 18-05-01, 15:04

Berechtigungen

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