PDA

View Full Version : Satz in Datei1 aber nicht in Datei2



Seiten : [1] 2

KingofKning
18-03-11, 12:04
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

Fuerchau
18-03-11, 12:09
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

B.Hauser
18-03-11, 12:35
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:



Select * from Datei1
Except
Select * from Date2


Das folgende Statement bringt Dir alle Datensätze, die in beiden Dateien identisch sind:

Select * from Datei1
Intersect
Select * from Datei2

Birgitta

KingofKning
18-03-11, 12:36
Danke,
und was hatte ich bei der 2. Abfrage falsch gemacht (nur so Interessehalber)

GG

Pikachu
18-03-11, 12:41
Da fehlt ein END vor dem FROM.

KingofKning
18-03-11, 12:46
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:



Select * from Datei1
Except
Select * from Date2
Das folgende Statement bringt Dir alle Datensätze, die in beiden Dateien identisch sind:

Select * from Datei1
Intersect
Select * from Datei2Birgitta

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

KingofKning
18-03-11, 12:47
Da fehlt ein END vor dem FROM.
Schön das man immer den selben Fehler macht, macht es denn einfacher......

GG

Fuerchau
18-03-11, 12:58
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).

KingofKning
18-03-11, 21:04
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

KingofKning
19-03-11, 08:26
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