Sql 指导我使用此存储过程或函数
每位经理的奖金金额是根据当月雇佣的新兵数量计算的。 每位经理第一次雇佣可获得1000英镑,第二次雇佣可额外获得500英镑 几乎每一张唱片都有一粒种子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
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