2012-10-10 2 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 

각 관리자의 보너스 금액은 해당 달에 고용 된 신입 사원 수에 따라 계산됩니다. 예. 각 매니저는 첫 고용을 위해 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 

가 있고 보너스 I는 .I 오전 시드 생성에 도움이 필요 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

를 얻으려면 씨앗

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

를 얻으려면. 더 좋은 방법은 함수가'BONUS = (Count + 1) * 500'이 될 수 있음을 인식하는 것입니다. 즉, 필요한 것은 매월 관리자 당 계산입니다. – RBarryYoung

+0

나는 말할 때마다 씨앗을 가질 것으로 기대하지 않는다. 내가 사용하는 상상의 용어. 어떻게 계산합니까? – superartsy

+0

알고리즘/접근 방식으로 언급했습니다. 시퀀스 지향 알고리즘은 SQL에 이상적이지 않습니다. 아래 답변은 COUNT() 질문을 다루고 있습니다. – RBarryYoung

답변

0

은 씨 - 시퀀스가 ​​특히 SQL로,이 문제를 해결하기 위해 매우 비효율적 인 방법이다 사용 보너스 직접

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