2012-10-10 16 views
1
Manager | Employee |HireDate 
---------------------------------------- 
ManagerA| EmpA  |1/1/2012 
managerA| EmpB  |1/15/2012 
ManagerB| Emp C  |2/1/2012 
ManagerA| Emp D  |2/15/2012 
ManagerB| Emp E  |2/8/2012 

每位經理的獎金金額是根據當月僱用的新員工人數計算的。 ex。每位管理人員在首次僱用時獲得1000美元,而下一個則需要500美元。使用此存儲過程或功能指導我

它幾乎就像每個記錄具有種子

Manager | Employee |HireDate | Seed 
------------------------------------------------ 
ManagerA| EmpA  |1/1/2012 | 1 
managerA| EmpB  |1/15/2012 | 2 
ManagerB| Emp C  |2/1/2012 | 1 
ManagerA| Emp D  |2/15/2012 | 1 
ManagerB| Emp E  |2/8/2012 | 2 

和獎金是1000+種子的函數(種子-1)* 500

我需要幫助產生。我是種子不知道我是否應該使用存儲過程來產生

最終我想生成一個表作爲下面的種子或功能

Manager | Employee |HireDate | Bonus 
------------------------------------------------- 
ManagerA| EmpA  |1/1/2012 | 1000 
managerA| EmpB  |1/15/2012 | 1500 
ManagerB| Emp C  |2/1/2012 | 1000 
ManagerA| Emp D  |2/15/2012 | 1000 
ManagerB| Emp E  |2/8/2012 | 1500 
+3

使用種子序是解決這個問題,尤其是與SQL非常低效的方式。更好的方法是認識到函數也可以是'BONUS =(Count + 1)* 500',這意味着你需要的是每個管理者每月的計數。 – RBarryYoung

+0

我不希望每種說法都有種子庫侖。它只是我使用的一個虛構的術語。我如何獲得計數? – superartsy

+0

我是指它作爲一種算法/方法。面向序列的算法對於SQL來說並不理想。下面的答案涵蓋了COUNT()問題。 – RBarryYoung

回答

0

要獲得種子

Select 
    * 
    ,ROW_NUMBER() Over(Partition By Manager, Year(HireDate), Month(HireDate) Order By HireDate) As Seed 
From 
    YourTable 

獲得獎金直接

Select 
    * 
    ,1000 + (Seed - 1) * 500 As Bonus 
From 
    (
     Select 
      * 
      ,ROW_NUMBER() Over(Partition By Manager, Year(HireDate), Month(HireDate) Order By HireDate) As Seed 
     From 
      YourTable 
) T 
+0

我喜歡這個查詢。如此高效。請嘗試讓你知道 – superartsy

+0

謝謝你的答案amit_g。 – superartsy