Forum: Datenbanken
by Delphi.Narium,
11. Feb 2019
Die Auftragsnummer wird über concat(waaunr,'-', waaupo) gebildet. Sie ist ein Konstrukt mehrerer Werte, die zusammen zu einem gewünschten Jahr existieren müssen. Ist diese Existenz gegeben, müssen alle Sätze, die über dieses Konstrukt verfügen, von der Datenbank herausgesucht werden.
Forum: Datenbanken
by Delphi.Narium,
11. Feb 2019
Warum sollte das so sein?
Dort ist eine recht gute Erklärung zu finden: https://stackoverflow.com/questions/7082449/exists-vs-join-and-use-of-exists-clause
Beide Varianten prüfen, ob es zu der Bedingung ein "Gegenstück" gibt. Während Exists nur sagt: "Ja gibt es" bzw. "Nein, gibt es nicht", liefert Join das Gegenstück. Bei großen Datenmengen kann das schon einen großen Unterschied...
Forum: Datenbanken
by Delphi.Narium,
8. Feb 2019
select concat(waaunr,'-', waaupo) as auftrag,
watenr,
oaagnr,
oamanr,
oarmda,
oatlkz,
oarmmg,
sum(oarmmg * wagewi / 1000) as wagewi
from as400archiev a
where exists (
Forum: Datenbanken
by Delphi.Narium,
8. Feb 2019
Was stimmt den jetzt bei den Vorschlägen nicht: Die Geschwindigkeit oder das Ergebnis?
Alle AuftragsNr aus 2018 werden gesucht:
select distinct AuftragsNr from tabelle where Fertigdatum between 20180000 and 20181231
und nun aus der Tabelle alle die, deren AuftragsNr im obigen Ergebnis enthalten ist:
select * from tabelle where AuftragsNr in (
select distinct AuftragsNr from tabelle...
Forum: Datenbanken
by Delphi.Narium,
8. Feb 2019
Oder doch eher dashier?select a.*
from Auftragsdaten A
join Auftragsdaten A2018
on A.AuftragsNr = A2018.AuftragsNr
where A2018.Fertigdatum between :anfang and :ende
Forum: Datenbanken
by Delphi.Narium,
8. Feb 2019
Es sollen aber alle Sätze zu den AuftragsNr angezeigt werden, zu denen "auch" einen Satz aus dem Jahr 2018 existiert und nicht "nur" die Sätze aus dem Jahr 2018. Man kommt also an einem IN oder einem adäquaten Join-Konstrukt nicht vorbei.
select * from tabelle where Fertigdatum >= '2018-01-01' and Fertigdatum <= '2018-12-31' hat den Nachteil, dass hier (vermutlich) Fertigdatum zu einer...
Forum: Datenbanken
by Delphi.Narium,
8. Feb 2019
Also eher sowas?
select * from tabelle a where exists (
select 1 from tabelle b
where a.AuftragsNr = b.AuftragsNr
and b.Fertigdatum between CAST('2018-01-01' AS DATE) and CAST('2018-12-31' AS DATE)
)
Forum: Datenbanken
by Delphi.Narium,
8. Feb 2019
eventuell sowas?
select * from tabelle a where exists (select 1 from tabelle b where Year(b.Fertigdatum) = 2018 and a.AuftragsNr = b.AuftragsNr)