Da in dem Select, das den Namen TU erhält, keine Zahlart enthalten ist, kann es auch keine tu.Zahlart geben.
In welcher Tabelle steht denn die Zahlart? Könntest Du uns bitte die Tabellendefinitionen zur Verfügung stellen. Ohne die ist es eine furchtbare Sucherei mit recht geringen Erfolgschancen.
Wenn Zahlart in der Tabelle Tagesumsatz steht, muss das innere
SQL so aussehen:
SQL-Code:
select -- Bitte hier alle Spalten aufführen, die aus der Tabelle Tagesumsatz benötigt werden
FahrerNr,
VKBG,
Zahlart
from Tagesumsatz
where Datum between :EingabeDatumVon and :EingabeDatumBis
Vermutlich muss es dann mit demhier weitergehen:
SQL-Code:
select -- FahrerNr, Name und Umsatz nach Zahlart separieren
tu.FahrerNr,
b.Name,
tu.VKBG as Umsatz,
case when tu.Zahlart = 1 then tu.VKBG else 0 end as Bar,
case when tu.Zahlart = 3 then tu.VKBG else 0 end as Karte,
case when tu.Zahlart = 2 then tu.VKBG else 0 end as LS
from (
select -- uns interessieren nur die Daten zum EingabeDatum
FahrerNr,
VKBG,
Zahlart
from Tagesumsatz
where Datum between :EingabeDatumVon and :EingabeDatumBis
) TU
-- nur die Fahrerdaten zum EingabeDatum dazu holen,
-- anstatt zuerst alle Fahrerdaten zu beliebigem Datum zusammensuchen
-- und dann erst die zum EingabeDatum zu separieren.
left join Fahrer b on b.Nr = tu.FahrerNr
Die dritte Variante könnte dann dashier werden:
SQL-Code:
select -- Zuletzt die Summen je FahrerNr bilden
FahrerNr,
Name,
Sum(Umsatz) as Umsatz,
Sum(Bar) as Bar,
Sum(Karte) as Karte,
Sum(LS) as LS
from (
select -- FahrerNr, Name und Umsatz nach Zahlart separieren
tu.FahrerNr,
b.Name,
tu.VKBG as Umsatz,
case when tu.Zahlart = 1 then tu.VKBG else 0 end as Bar,
case when tu.Zahlart = 3 then tu.VKBG else 0 end as Karte,
case when tu.Zahlart = 2 then tu.VKBG else 0 end as LS
from (
select -- uns interessieren nur die Daten zum EingabeDatum
FahrerNr,
VKBG,
Zahlart
from Tagesumsatz
where Datum between :EingabeDatumVon and :EingabeDatumBis
) TU
-- nur die Fahrerdaten zum EingabeDatum dazu holen,
-- anstatt zuerst alle Fahrerdaten zu beliebigem Datum zusammensuchen
-- und dann erst die zum EingabeDatum zu separieren.
left join Fahrer b on b.Nr = tu.FahrerNr
) a
Group by
FahrerNr,
Name;