Ich wurde beauftragt, eine Ansicht für einen Kunden zu erstellen. Insbesondere muss es in einer Ansicht sein . Es gibt jedoch einige Berechnungen, bei denen ich nicht sicher bin, wie ich sie in einer Ansicht ausführen soll. Ich weiß nicht, ob es überhaupt möglich ist. Aber andererseits ist mein Verstand schwach.
Ich verwende SQL Server 2008R2, daher OVER()
funktionieren erweiterte Funktionen nicht.
Nehmen wir an, eine Person erhält 400 Dollar zum Ausgeben. Sie können mehr ausgeben, aber die ersten 400 Dollar sind kostenlos. Eine Spalte des Berichts enthält den Betrag, den die Person für etwas ausgegeben hat, und eine andere Spalte enthält den Gesamtbetrag, den die Person aus eigener Tasche bezahlen muss.
Für den ersten Datensatz im Bericht für diese Person hat eine Spalte einen Betrag, den sie ausgegeben hat, z. B. 50 US-Dollar, und eine zweite Spalte hat einen Betrag von 0 US-Dollar. Hinter den Kulissen müssen sie noch 350 Dollar ausgeben.
Der nächste Rekord hat die Person, die 300 Dollar ausgibt. In der zweiten Spalte wird weiterhin 0 US-Dollar angezeigt, und hinter den Kulissen sind die anfänglichen 400 US-Dollar jetzt 50 US-Dollar.
Der dritte Rekord für die Person zeigt, dass sie 75 Dollar ausgegeben hat, aber nur noch 50 Dollar von den anfänglichen 400 Dollar übrig sind. Die zweite Spalte sollte jetzt einen Wert von 25 USD enthalten. Sie haben die anfänglichen 400 Dollar aufgebraucht und geben jetzt ihr eigenes Geld aus.
Der vierte Datensatz zeigt, dass sie 40 US-Dollar ausgegeben haben. In der zweiten Spalte werden nun 65 US-Dollar angezeigt. usw...
Ich habe kurz über CTEs und Tabellenwertfunktionen und dergleichen gelesen, aber ist es möglich, sie in einer beliebigen Kombination zu verwenden, um das gewünschte Verhalten oben zu erzielen?
Unten finden Sie einen Beispielcode für die Struktur und die gewünschten Ergebnisse
CREATE TABLE Payroll (
PersonID int,
PlanCode varchar(10),
Deduction int NULL
)
GO
INSERT INTO Payroll (PersonID, PlanCode, Deduction)
VALUES (1, 'Medical', 200)
,(1, 'Dental', 250)
,(1, 'Vision', 300)
,(2, 'Medical', 100)
,(2, 'Dental', 150)
,(2, 'Vision', 100)
,(2, 'Disability', 100)
,(2, 'Life', 140)
Gewünschten Erfolge:
Es kann sinnvoll sein, sich das OutOfPocket
als vorzustellen TotalOutOfPocket
.
Es gibt nichts Besseres als einen Zeitstempel in den Quelldaten für die Reihenfolge der Einträge. Die Reihenfolge ist nicht zu wichtig. Wenn eine Bestellung erfolgt, erfolgt diese auf der PlanCode
.
Aufgrund unserer Einschränkungen und einer dritten Spalte, die nicht enthalten sein musste, sind keine doppelten Einträge möglich.
(PersonID, PlanCode) INCLUDE (Deduction)
würde den Abfragen helfen (je nachdem, was Sie verwenden möchten).