PDA

View Full Version : Sql Berechnungen



Seiten : [1] 2

tarkusch
17-10-12, 05:43
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

tarkusch
17-10-12, 07:15
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

tarkusch
17-10-12, 07:35
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

Fuerchau
17-10-12, 07:49
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.

tarkusch
17-10-12, 08:03
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

Fuerchau
17-10-12, 08:48
Und hinter dem letzten "AUF" ist das Komma auch zu viel.

tarkusch
17-10-12, 08:54
Ich stehe da voll auf den Schlauch.

Wo gebe ich die Datei an oder muss ich über das Statement noch was darüberlegen?