-3
ReportingDirector   ManagerID  EmployeeName EmployeeID  WeekNumber  Pointsrewarded 


john(director)    1    a   11    week1   100 
john(director)    1    b   22    week1   200 
john(director)    1    c   33    week1   300 
bob(director)    2    d   44    week1   -10 
bob(director)    2    e   55    week1   30 
bob(director)    2    f   66    week1   40 
bob(director)    2    g   77    week1   50 
bob(director)    2    h   88    week1   90 
cavin(director)    3    i   99    week1   300 
cavin(director)    3    j   100    week1   400 
cavin(director)    3    k   111    week1   800 
cavin(director)    3    l   222    week1   305 
cavin(director)    3    m   333    week1   23 
cavin(director)    3    n   444    week1   44 
alpha (senior Director)  111    john   1111    week1   455 
alpha(senior Director)  111    bob   2222    week1   -10 
alpha(senior Director)  111    cavin  3333    week1   77 




x       x    mr.aplha  1    week1   99 

我有一个表上面。这里我们有三个位置employees,directorsenior director。员工属于董事,董事属于高级董事。从表格和奖励积分检查值

问题:如果一个导演在任何人都有一个点(PLZ见pointsReawrded列)-10,然后导演得-100分,即在pointsRewarded列中添加-100点为各自的董事。如果没有雇员,在他/她下方,则导演得到200分的奖励。

例如,表中的员工'd'在bob下,谁是董事。所以-100奖励给鲍勃。再次,john下的任何人都没有-10,所以约翰得到200分的奖励。

即使在他下面的任何员工的点数为-10,我们也不会奖励'alpha'的任何分数,因为他在链条顶部。

任何人都可以通过广义查询来帮助我检查导演下的任何员工是否得分-10,并且惩罚该导演得分-100分。如果不是200分的奖励。

+1

您可以发布您的代码? –

+1

请给我们看看你已经尝试过的代码 – massko

回答

1

尝试这样的事情

;with cte as 
(
    select ReportingDirector, ManagerID, EmployeeName, EmployeeID, WeekNumber, Pointsrewarded 
    ,COUNT(IIF(Pointsrewarded < 0,0,null)) 
over (partition by ReportingDirector order by ReportingDirector) as grp 
    from #tmp1 
    where ReportingDirector = '' 
    UNION ALL 
    select a.ReportingDirector, a.ManagerID, a.EmployeeName, a.EmployeeID, a.WeekNumber, a.Pointsrewarded 
    ,COUNT(IIF(a.Pointsrewarded < 0,0,null)) 
over (partition by a.ReportingDirector order by a.ReportingDirector) as grp 
    FROM #tmp1 a 
    join cte on a.ManagerID = cte.EmployeeID 
) 
select cte.*, IIF(grp = 1, -100,200) MgrPointsRewarded 
from cte 
where ReportingDirector <> '' 
+0

感谢您的意见 - (导演)只是为了让大家知道。它不会在数据库中存在,当然。 –