Sql 指导我使用此存储过程或函数

Sql 指导我使用此存储过程或函数,sql,sql-server,sql-server-2008,Sql,Sql Server,Sql Server 2008,每位经理的奖金金额是根据当月雇佣的新兵数量计算的。 每位经理第一次雇佣可获得1000英镑,第二次雇佣可额外获得500英镑 几乎每一张唱片都有一粒种子 Manager | Employee |HireDate ---------------------------------------- ManagerA| EmpA |1/1/2012 managerA| EmpB |1/15/2012 ManagerB| Emp C |2/1/2012 ManagerA| Emp

每位经理的奖金金额是根据当月雇佣的新兵数量计算的。 每位经理第一次雇佣可获得1000英镑,第二次雇佣可额外获得500英镑

几乎每一张唱片都有一粒种子

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
奖金是种子1000+(种子-1)*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
获得种子

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
直接获得奖金

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

使用种子序列是解决此问题的一种非常低效的方法,尤其是使用SQL。更好的方法是识别该函数的值,该函数也可以是
奖金=(Count+1)*500
,这意味着您只需要每个经理每月的计数。我不希望每个月都有一个种子库。这只是我使用的一个虚构的术语。我是如何获得计数的?我指的是一种算法/方法。面向序列的算法不适合SQL。下面的答案涵盖了COUNT()问题。@rbaryyoung:种子概念在这里很重要,因为
COUNT
会忽略在完全相同的
HireDate
上雇佣的员工。我喜欢这个问题。这么有效率。我会尽力让你知道的
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