Sql-Server

是否可以在視圖中進行此數學運算?

  • October 10, 2016

我的任務是為客戶創建一個視圖。具體它必須在一個視圖中。但是,我不確定如何在視圖中進行一些數學運算。我不知道這是否可能。但話又說回來,我的頭腦很虛弱。

我使用的是 SQL Server 2008R2,所以高級OVER()功能不起作用。

假設給了一個人 $ 400 to spend. They can spend more, but the first $ 400是免費的。報告的一欄將顯示該人在某事上花費的金額,另一欄將顯示該人需要自掏腰包支付的總金額。

因此,對於此人的報告中的第一條記錄,一列將包含他們已花費的金額,例如 $ 50, and then a second column will have a $ 0. 在幕後,他們還有 350 美元可花。

下一條記錄有消費的人 $ 300. The second column will still show a $ 0,幕後的初始 $ 400 is now $ 50.

該人的第三條記錄顯示他們花費了 $ 75 dollars, but they only have $ 初始剩餘50個 $ 400. The second column should now have a $ 裡面有 25 個值。他們已經用光了最初的 400 美元,現在花的是自己的錢。

第四條記錄顯示他們花了 $ 40, so now the second column will show a $ 65.等等…

我已經簡要了解了 CTE 和表值函式等,但是是否可以將它們以任何組合使用以提供上述所需的行為?

下面是一些結構和期望結果的範常式式碼

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) 

期望的結果:

在此處輸入圖像描述

OutOfPocket認為as可能是有意義的TotalOutOfPocket

源數據中沒有什麼像時間戳那樣用於條目的排序。排序不是很重要。如果完成任何訂購,它將在PlanCode.

根據我們的限制和不需要包含的第三列,不會有任何重複的條目。

這在 PlanCode 上排序-如果您有重複項,則使用 row_number()

如果您需要特定訂單,則需要在表中包含該訂單

 select PersonID, PlanCode, Deduction, [sum]
      , case when [sum] < 400 then 0 else [sum] - 400 end as oop
 from
 ( select p1.PersonID, p1.PlanCode, p1.Deduction 
        , ( select sum(p2.Deduction) 
              from payroll p2  
             where p2.PersonID  = p1.PersonID 
               and p2.PlanCode <= p1.PlanCode ) as [sum] 
   from payroll p1 
 ) tt
 order by tt.PersonID, tt.PlanCode 

要麼

 select p1.PersonID, p1.PlanCode, p1.Deduction 
      , case  when sum(p2.Deduction) < 400 then 0 else sum(p2.Deduction) - 400 end as OOP
 from payroll p1 
 join payroll p2  
       on p2.PersonID  = p1.PersonID 
      and p2.PlanCode <= p1.PlanCode  
group by p1.PersonID, p1.PlanCode, p1.Deduction 

引用自:https://dba.stackexchange.com/questions/150329