[NEWSboard IBMi Forum]
Seite 1 von 2 1 2 Letzte
  1. #1
    Registriert seit
    Aug 2006
    Beiträge
    2.077

    Satz in Datei1 aber nicht in Datei2

    Hallo,
    habe hier im Forum mal gesucht und auch ne Lösung gefunden......Nur leider läuft sie nicht wenn ich sie auf meine Dateien anpasse....

    Habe 2 Sachen ausprobiert:

    select apo01tr.*, case when (select count(ako01pf.*)
    from ako01pf where ako01pf.akanr = apo01tr.apanr)
    > 1 then 'gleiche Sätze vorhanden'
    else 'keine gleichen Sätze vorhanden'
    from apo01tr

    Dann bekomme ich die Meldung:
    Token * ungültig. Gültige Token: DAY RRN CAST CHAR DATE DAYS HASH HO

    Die andere Variante war:
    with
    xapo01tr as (
    select apanr, count(*) as xc
    from apo01tr
    group by apanr
    )
    select ako01pf.*, case when xc > 1
    then 'gleiche Sätze vorhanden'
    else 'keine gleichen Sätze vorhanden'
    from ako01pf inner join xapo01tr on akanr=apanr
    Dann bekomme ich die Meldung:
    Schlüsselwort FROM nicht erwartet. Gültige Token: + -.

    Kann einer der SQL kann mir mal bitte weiterhelfen?!

    GG

  2. #2
    Registriert seit
    Feb 2001
    Beiträge
    20.245
    Der case ist nicht beendet, beim Count gibt man entweder * oder einen Feldnamen an.

    select apo01tr.*,
    case when
    (select count(*)
    from ako01pf where ako01pf.akanr = apo01tr.apanr)
    > 1 then 'gleiche Sätze vorhanden'
    else 'keine gleichen Sätze vorhanden'
    end

    from apo01tr
    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
    Aug 2001
    Beiträge
    2.875
    Angenommen beide Dateien haben den beiden Aufbau und Du willst nur feststellen welche Datensätze in Datei1 jedoch nicht in Datei2 sind und Du außerdem auf Release V5R3 oder höher bist, dann probier mal folgendes:

    Code:
    Select * from Datei1
    Except
    Select * from Date2
    Das folgende Statement bringt Dir alle Datensätze, die in beiden Dateien identisch sind:
    Code:
    Select * from Datei1
    Intersect
    Select * from Datei2
    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

  4. #4
    Registriert seit
    Aug 2006
    Beiträge
    2.077
    Danke,
    und was hatte ich bei der 2. Abfrage falsch gemacht (nur so Interessehalber)

    GG

  5. #5
    Registriert seit
    Nov 2003
    Beiträge
    2.307
    Da fehlt ein END vor dem FROM.

  6. #6
    Registriert seit
    Aug 2006
    Beiträge
    2.077
    Zitat Zitat von B.Hauser Beitrag anzeigen
    Angenommen beide Dateien haben den beiden Aufbau und Du willst nur feststellen welche Datensätze in Datei1 jedoch nicht in Datei2 sind und Du außerdem auf Release V5R3 oder höher bist, dann probier mal folgendes:

    Code:
    Select * from Datei1
    Except
    Select * from Date2
    Das folgende Statement bringt Dir alle Datensätze, die in beiden Dateien identisch sind:
    Code:
    Select * from Datei1
    Intersect
    Select * from Datei2
    Birgitta
    Danke, leider sind es 2 unterschiedliche Dateien (ähnlich aber nicht identisch).
    Aber Gut zu wissen das es sowas gibt.

    Hatte das mal ausprobiert "select akanr from ako01pf except select akanr from ako01pf" bekomme dann aber keinen Satz angezeigt. In beiden Feldern steht die Auftragsnummer drin.

    GG

  7. #7
    Registriert seit
    Aug 2006
    Beiträge
    2.077
    Zitat Zitat von Pikachu Beitrag anzeigen
    Da fehlt ein END vor dem FROM.
    Schön das man immer den selben Fehler macht, macht es denn einfacher......

    GG

  8. #8
    Registriert seit
    Feb 2001
    Beiträge
    20.245
    Wie immer gibts mehrere Möglichkeiten:

    select * from Datei1
    exception join Datei2
    on a.Key=b.Key [and ...]

    Selektiert alle aus Datei1 die nicht in Datei2 sind (Gegenteil von inner).
    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
    Aug 2006
    Beiträge
    2.077

    Irgendwas stimmt nicht!

    Hallo *all,
    ich habe folgendes Statement abgesetzt:
    select distinct apo01tr.apanr, apo01tr.§§date
    from apo01tr exception join apo01pf
    on apo01tr.apanr = apo01pf.apanr
    and apo01tr.§§date > 20110301
    and apo01tr.apkdj2 = 1
    order by apo01tr.apanr asc

    und bekomme das Ergebnis.
    32115 20.100.903
    32115 20.100.904
    32116 20.100.901
    32116 20.100.902
    32117 20.100.902
    32117 20.100.903
    32119 20.100.830
    32119 20.100.831
    32120 20.100.827

    Wenn ich das in Query mache bekomme ich folgendes zu sehen:

    32460 20.110.301
    32461 20.110.301
    32462 20.110.301
    32463 20.110.301
    32464 20.110.301
    32464 20.110.301
    32464 20.110.301

    Sprich im SQL ignoriert der gefließentlich die Datumsabfrage.
    Warum?

    GG

  10. #10
    Registriert seit
    Aug 2006
    Beiträge
    2.077
    Also ich habe das heute nochmals gemacht, und die SQL-Abfrage geändert:
    select distinct apo01tr.apanr, apo01tr.§§date
    from apo01tr
    where apo01tr.apkdj2 = 1
    and apo01tr.§§date > 20110301
    order by apanr desc

    dann bekomme ich die selben Sätze wie im Query
    843251 20.110.318
    843250 20.110.318
    843249 20.110.318
    843248 20.110.317
    843247 20.110.317
    843246 20.110.317
    843245 20.110.317
    843244 20.110.316
    843243 20.110.316
    843243 20.110.317

    Wieso knallt die Exception dann so dazwischen?
    GG

  11. #11
    Registriert seit
    Aug 2001
    Beiträge
    2.875
    Schau Dir mal Deine beiden Abfragen an!
    In der ersten (mit dem exception join) wird sowohl das Datum als auch apo01tr.apkdj2 = 1 in der JOIN-Anweisung hinterlegt.

    In der zweiten Abfrage wird das Datum und apo01tr.apkdj2 in der Where-Bedingung angegeben.

    Wenn Du Deine SQL-Abfrage wie folgt änderst, solltest Du auch beim Exception Join das erwartete Ergebnis erhalten:
    Code:
    select distinct apo01tr.apanr, apo01tr.§§date
       from    apo01tr exception join apo01pf
            on apo01tr.apanr = apo01pf.apanr
       Where     apo01tr.§§date > 20110301
             and apo01tr.apkdj2 = 1
       order by apo01tr.apanr asc
    ... genauso hast Du es vermutlich auch in deinem Query abgesetzt.

    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

  12. #12
    Registriert seit
    Aug 2006
    Beiträge
    2.077
    Danke,
    werde ich morgen mal ausprobieren.

    GG

Similar Threads

  1. Satz löschen - ODBC
    By heini in forum IBM i Hauptforum
    Antworten: 1
    Letzter Beitrag: 27-06-06, 11:34
  2. SFLEND - Bleibt nicht beim letzten Satz stehen...
    By svente in forum NEWSboard Programmierung
    Antworten: 3
    Letzter Beitrag: 23-02-06, 15:32
  3. Satz ändern in Subfile
    By Toschie in forum NEWSboard Programmierung
    Antworten: 6
    Letzter Beitrag: 31-05-05, 11:37
  4. SUBFILE - Einen bestimmten Satz in der 1. Zeile plazieren
    By malzusrex in forum NEWSboard Programmierung
    Antworten: 3
    Letzter Beitrag: 29-10-04, 09:49
  5. ILE Cobol: Satz löschen aus Subfile
    By rebe in forum NEWSboard Programmierung
    Antworten: 7
    Letzter Beitrag: 16-04-04, 09:29

Berechtigungen

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