Ich muss einen Prozentsatz von einem kumulativen Wert berechnen. Die auf jeden Wert in jeder Zeile anzuwendende Prozentrate hängt von Raten ab, die aus einer anderen Tabelle entnommen werden. Die Berechnung der prozentualen Rate muss in einer abgestuften Weise erfolgen, da die Steuer auf die Einnahmen berechnet werden kann.
zB:
Löhne = 1000
600 * 10% [Erster $ 600 mit niedrigerem Steuersatz berechnet]
400 * 30% [Restbetrag berechnet zu einem höheren Steuersatz]
Also, ich habe versucht, das zum Laufen zu bringen, aber ich kann es nicht lösen. Der DBA ist weg, also wurde er mir übergeben. Am meisten SQL bin ich ok, aber ich bin mir nicht sicher, wie ich dieses Problem angehen soll, oder was ich in Google suchen sollte, also Entschuldigung ist dies eine einfache Suche weg, bitte leiten Sie mich einfach an die URL und ich ' Ich werde versuchen, es selbst auszuarbeiten!
Wie auch immer, unten ist ein Beispiel für das Format der Datentabelle (#v) und ein Beispiel für die Ranges-Tabelle (#tiers), und wie ich bis jetzt weitergekommen bin. Ich brauche eine neue Spalte, die die Berechnung von 'cval' mit den richtigen Prozent-Raten hat, wie ich oben erklärt habe.
Hoffe jemand kann mir helfen oder mir in die richtige Richtung zeigen! Danke, J.
%Vor%Wenn Ihre tatsächliche Logik viel mehr Regeln hat als diese, sollten Sie besser in einer prozeduralen Sprache wie PL / SQL oder T-SQL schreiben, weil die Wahrscheinlichkeit ist, dass andere Anwendungen diese Logik unter Verwendung von .. verwenden möchten. sag .. * get_tax_for_pay (i_pay) * oder so ähnlich.
Aber wenn das alles ist, was Sie brauchen, dann sollte das folgende SQL gut genug sein.
Getestet in Oracle, da ich momentan keinen Zugriff auf SQL Server habe. Wenn Sie Probleme haben, posten Sie es in den Kommentaren. Anmerkungen am Ende.
%Vor%Für die Berechnung ...
Sie sind nur an der Besteuerung der Beträge interessiert, bei denen ein bestimmter Lohn einen bestimmten Schwellenwert für die Steuerklasse überschreitet. Beispiel .. 1000 $ würde nicht in der Steuerklasse 3k-5k besteuert werden.
In Fällen, in denen der Betrag den Schwellenwert überschreitet, berechnen Sie den Mindestbetrag von a) (max-min) in diesem Schwellenwert b) (Mindestbezahlungsgrenze) damit. Für eine Gebühr von 5500 berechnen Sie nur 1000 $ in der 1000-2000 $ Steuerklasse. Wenn Sie 1200 bezahlen, berechnen Sie nur 200 $ in der 1000-2000 $ Steuerklasse.
Wenn Sie die Min- und Max-Werte nicht in verschiedenen Spalten haben, können Sie die Lead / Lag-Funktionen oder einen Self-Join verwenden, um beide in derselben Zeile wie in meiner Testtabelle zu erhalten. Wenn Sie für den letzten Bereich keinen Maximalwert haben, verwenden Sie NVL oder die entsprechende Funktion, um einen wirklich großen Wert zur Definition des Bereichs zuzuweisen. (oder Code für Nullen:))
Tags und Links sql sql-server tsql