Tôi đã được giao nhiệm vụ tạo ra một khung nhìn cho một khách hàng. Cụ thể nó phải ở trong một cái nhìn . Tuy nhiên, có một số phép toán mà tôi không chắc chắn cách thực hiện trong một khung nhìn. Tôi không biết nếu nó thậm chí có thể. Nhưng sau đó, một lần nữa, tâm trí của tôi là yếu đuối.
Tôi đang sử dụng SQL Server 2008R2, vì vậy OVER()
chức năng nâng cao không hoạt động.
Giả sử một người được cho 400 đô la để chi tiêu. Họ có thể chi tiêu nhiều hơn, nhưng $ 400 đầu tiên là miễn phí. Một cột của báo cáo sẽ có số tiền mà người đó đã chi cho một thứ gì đó, và một cột khác sẽ có tổng số tiền mà người đó cần phải trả bằng tiền túi của họ.
Vì vậy, đối với bản ghi đầu tiên trong báo cáo cho người này, một cột sẽ có số tiền họ đã chi tiêu, giả sử là 50 đô la, và sau đó một cột thứ hai sẽ có 0 đô la. Đằng sau hậu trường họ vẫn còn 350 đô la để chi tiêu.
Kỷ lục tiếp theo có người chi 300 đô la. Cột thứ hai vẫn sẽ hiển thị $ 0 và đằng sau hậu trường, $ 400 ban đầu bây giờ là $ 50.
Kỷ lục thứ ba cho người này cho thấy họ đã chi 75 đô la, nhưng họ chỉ còn lại 50 đô la so với 400 đô la ban đầu. Cột thứ hai bây giờ sẽ có giá trị $ 25 trong đó. Họ đã cạn kiệt 400 đô la ban đầu và hiện đang tiêu tiền của chính họ.
Bản ghi thứ tư cho thấy họ đã chi 40 đô la, vì vậy bây giờ cột thứ hai sẽ hiển thị 65 đô la. Vân vân...
Tôi đã đọc ngắn gọn về CTE và các hàm có giá trị của bảng và như vậy, nhưng liệu có thể sử dụng chúng trong bất kỳ kết hợp nào để đưa ra hành vi mong muốn ở trên không?
Dưới đây là một số mã mẫu cho cấu trúc và kết quả mong muốn
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)
Kết quả mong muốn:
Nó có thể có ý nghĩa để nghĩ về OutOfPocket
như TotalOutOfPocket
.
Không có gì giống như dấu thời gian trong dữ liệu nguồn để sắp xếp các mục. Việc đặt hàng không quá quan trọng. Nếu bất kỳ đặt hàng được thực hiện, nó sẽ được trên PlanCode
.
Dựa trên các ràng buộc của chúng tôi và cột thứ 3 không cần thiết phải đưa vào, sẽ không có bất kỳ mục trùng lặp nào có thể.
(PersonID, PlanCode) INCLUDE (Deduction)
sẽ giúp các truy vấn (bất cứ bạn chọn sử dụng).