View Full Version : Sql Berechnungen
Morgen Morgen,
Ich habe eine Datei, wo Stunden, Stundensatz, %-Rabatt und %-Aufschlag angegeben ist.
Ich soll hier alle Summen bilden (Std. * Std.Satz), aber falls im Feld %-Rabatt oder Feld %-Aufschlag etwas angegeben worden ist, muss ich das würdigen.
Ist das mit einem Sql-Statement machbar, oder brauch ich da eine Programm-Routine?
Gruß
Tarki
andreaspr@aon.at
17-10-12, 06:58
Ja möglich ist es schon.
Dafür könntest du einfach eine CASE Anweisung verwenden.
CASE
when RabattFeld > 0
Then "Berechne Rabatt"
Else StdSatz
END
lg Andreas
andreaspr@aon.at
17-10-12, 07:10
Hier hab ich noch ein kleines Beispiel. Mit einer Vorselektierung ist es sicher einfacher.
Im innersten Select berechnest du den Zuschlag, Rabatt und was noch alles geben könnte.
Und im äußeren Select zählst du einfach alles zusammen.
select StdSatz , StdSatz - Rabatt+ Zuschlag, Rabatt, Zuschlag
from (
select StdSatz ,
case
when Rabatt > 0
then StdSatz /100 * Rabatt
else 0
end Rabatt,
case
when Zuschlag > 0
then StdSatz /100 * Zuschlag
else 0
end Zuschlag,
from t4
) t1
Hier hab ich noch ein kleines Beispiel. Mit einer Vorselektierung ist es sicher einfacher.
Im innersten Select berechnest du den Zuschlag, Rabatt und was noch alles geben könnte.
Und im äußeren Select zählst du einfach alles zusammen.
select StdSatz , StdSatz - Rabatt+ Zuschlag, Rabatt, Zuschlag
from (
select StdSatz ,
case
when Rabatt > 0
then StdSatz /100 * Rabatt
else 0
end Rabatt,
case
when Zuschlag > 0
then StdSatz /100 * Zuschlag
else 0
end Zuschlag,
from t4
) t1
Morgen Andreas,
cool, besten Dank.
Werde es gleich am Nachmittag ausprobieren.
Lg
Tarki
Hallo Andreas,
bekomme ein Token-Fehler.
Was habe ich da falsch angegeben?
STD = geleistete Stunden
STS = Stundensatz
SELECT SUM(DECIMAL(STD * STS, 7, 2)) FROM FILE
(select STS,
case
when RAB > 0
then STS / 100 * RAB
else 0
end RAB,
when AUF > 0
then STS / 100 * AUF
else 0
end AUF,
From T4
)
T1
Gruß und Dank im Voraus
Tarki
SELECT SUM(DECIMAL(STD * STS, 7, 2)) FROM FILE
(select STS,
case
when RAB > 0
then STS / 100 * RAB
else 0
end RAB,
case
when AUF > 0
then STS / 100 * AUF
else 0
end AUF,
From T4
)
T1
Da fehlt nur ein neuer "case".
Allerdings werden die von dir berechneten Felder RAB und AUF ja nicht verwendet.
leider bekomme ich noch immer eine Fehlermeldung.
Muss man im Teil : From T4 nicht eine Datei angeben?
Nachrichten-ID . . . . : SQL0104 Bewertung . . . . . . : 30
Nachrichtenart . . . . : Diagnose
Nachricht . . . : Token ( ungültig. Gültige Token: FOR SKIP WITH FETCH ORDER
UNION EXCEPT OPTIMIZE.
andreaspr@aon.at
17-10-12, 08:22
Beim FROM FILE gehört das FILE weg.
Das Select innerhalb der Klammer (Select ...) T1 ist das From.
T1 ist somit eine temporäre Tabelle die du verwendest.
SELECT SUM(DECIMAL(STD * STS, 7, 2)) FROM
(select STS,
case
when RAB > 0
then STS / 100 * RAB
else 0
end RAB,
case
when AUF > 0
then STS / 100 * AUF
else 0
end AUF,
From T4
)
T1
Und hinter dem letzten "AUF" ist das Komma auch zu viel.
Ich stehe da voll auf den Schlauch.
Wo gebe ich die Datei an oder muss ich über das Statement noch was darüberlegen?