-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 

私は上記の表を持っています。ここには、3つのポジション、employeesdirectorsenior directorがあります。従業員はディレクターの下にあり、ディレクターはシニアディレクターの下にあります。それに応じてテーブルと報酬ポイントの値を確認してください

問題:ディレクターの下ですべての人が、ポイントを持っている場合はすなわち、その後、ディレクターは-100ポイントを取得し、-10の(PLZ pointsReawrded列を参照)、そのそれぞれの取締役のためpointsRewarded列に-100ポイントを追加します。従業員に-10歳以下の従業員がいない場合、ディレクターは200ポイントの報酬を得ます。

たとえば、テーブルの従業員 'd'はディレクターのボブの下にあります。 -100はボブに報酬を与えます。再び、ジョンの下にいる人は-10人なので、ジョンは200ポイントの報酬を得る。

チェーンの一番上にいるため、彼の下にある従業員のポイントが-10であっても、「アルファ」にポイントを与えることはありません。

ディレクターの従業員のスコアが-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

入力のおかげで - (ディレクター)は皆さんに知ってもらいます。それはデータベースにはありません。 –

関連する問題