Hallo,
erstmal ein gesundes neues Jahr zusammen!
Mein Chef hat im Zuge des Weihnachtsfrieden von Firebird 2 auf Firebird 3 gewechselt. Lief soweit wohl alles erfolgreich, Programme laufen.
Meine Datenbankabfragen laufen aber größtenteils gegen die Wand. Ich konnte jetzt auch schon den Verursacher eingrenzen... eine einfache Abfrage die in FB2 lief:
Das Problem liegt am INNER JOIN. Er nimmt das nicht an, bringt Fehler, dass er ep.datumbis nicht finden kann, habe auch getestet, die Tabellen umzunennen.
Was funkltionierte, war das ganze in WITH aufzusplitten:
Besteht die Möglichkeit den INNER JOIN mit einer erstellten Tabelle zu nutzen? Oder bleibt nur noch die WITH Table Variante?
Danke,
MfG
Erik
erstmal ein gesundes neues Jahr zusammen!
Mein Chef hat im Zuge des Weihnachtsfrieden von Firebird 2 auf Firebird 3 gewechselt. Lief soweit wohl alles erfolgreich, Programme laufen.
Meine Datenbankabfragen laufen aber größtenteils gegen die Wand. Ich konnte jetzt auch schon den Verursacher eingrenzen... eine einfache Abfrage die in FB2 lief:
Code:
SELECT ep.personalnr, ep.auftragnr, TRIM(p.nachname) AS nachname, TRIM(p.VORNAME) AS vorname, CASE WHEN ep.bezeichn IS NULL THEN TRIM(p.einstberuftext) ELSE TRIM(ep.bezeichn) END AS bezeichn, k.kundennr, TRIM(k.kundname) AS kundname, CASE WHEN k.disponent IS NULL OR k.disponent = '' THEN '- Keiner -' ELSE TRIM(k.disponent) END AS dispoku, ep.datumvon, ep.datumbis
FROM einspers ep, personal p, auftrag a, kunden k
INNER JOIN (
SELECT ep.personalnr, MAX(ep.datumbis) AS datumbis
FROM einspers ep
WHERE ep.datumvon <= TIMESTAMP 'TODAY' AND ep.auftragnr >0
GROUP BY ep.personalnr
) ep1 ON ep.personalnr = ep1.personalnr AND ep.datumbis = ep1.datumbis
WHERE p.internpers = 'N' AND p.persstatus = 2 AND p.personalnr = ep.personalnr AND ep.auftragnr >0 AND ep.auftragnr = a.auftragnr AND k.kundennr = a.kundennr
Das Problem liegt am INNER JOIN. Er nimmt das nicht an, bringt Fehler, dass er ep.datumbis nicht finden kann, habe auch getestet, die Tabellen umzunennen.
Was funkltionierte, war das ganze in WITH aufzusplitten:
Code:
SELECT *
FROM
(
WITH tb_einsatz AS
(
SELECT ep.personalnr, ep.auftragnr, TRIM(p.nachname) AS nachname, TRIM(p.VORNAME) AS vorname, CASE WHEN ep.bezeichn IS NULL THEN TRIM(p.einstberuftext) ELSE TRIM(ep.bezeichn) END AS bezeichn, k.kundennr, TRIM(k.kundname) AS kundname, CASE WHEN k.disponent IS NULL OR k.disponent = '' THEN '- Keiner -' ELSE TRIM(k.disponent) END AS dispoku, ep.datumvon, ep.datumbis
FROM einspers ep, personal p, auftrag a, kunden k
WHERE p.internpers = 'N' AND p.persstatus = 2 AND p.personalnr = ep.personalnr AND ep.auftragnr >0 AND ep.auftragnr = a.auftragnr AND k.kundennr = a.kundennr
)
, tb_letzter_einsatz AS
(
SELECT ep.personalnr, MAX(ep.datumbis) AS datumbis
FROM einspers ep
WHERE ep.datumvon <= TIMESTAMP 'TODAY' AND ep.auftragnr >0
GROUP BY ep.personalnr
)
SELECT ei.*
FROM tb_einsatz ei, tb_letzter_einsatz le
WHERE ei.personalnr = le.personalnr AND ei.datumbis = le.datumbis
)
Besteht die Möglichkeit den INNER JOIN mit einer erstellten Tabelle zu nutzen? Oder bleibt nur noch die WITH Table Variante?
Danke,
MfG
Erik