Sql 查找连续值并相应地打分

Sql 查找连续值并相应地打分,sql,sql-server,sql-server-2012,Sql,Sql Server,Sql Server 2012,我这里有一张桌子:桌子1 employee ID Reporting Manager EmployeeName Week No. Points 1 Mr. A Bob week1 -10 2 Mr. A Deepak week1 50 3

我这里有一张桌子:桌子1

employee ID     Reporting Manager       EmployeeName    Week No.        Points
1                  Mr. A                    Bob         week1            -10
2                  Mr. A                    Deepak      week1             50
3                  Mr. B                    Brinda      week1             60
4                  Mr. B                    Chriss      week1            -10
1                  Mr. A                    Bob         week2            -10
2                  Mr. A                    Deepak      week2             40
3                  Mr. B                    Brinda      week2             20
4                  Mr. B                    Chriss      week2             90
1                  Mr. A                    Bob         week3             -10
2                  Mr. A                    Deepak      week3             30
3                  Mr. B                    Brinda      week3             40
4                  Mr. B                    Chriss      week3             50
1                  Mr. A                    Bob         week4            -10
2                  Mr. A                    Deepak      week4            -10
3                  Mr. B                    Brinda      week4            -10
4                  Mr. B                    Chriss      week4             30
1                  Mr. A                    Bob         week5            -10
2                  Mr. A                    Deepak      week5            -10
3                  Mr. B                    Brinda      week5             20
4                  Mr. B                    Chriss      week5             50
在“第二周”专栏中, 我有连续5周的数据,每周我都要检查这些情况-

1.每周我都会检查本周的积分。如果本周的积分值为-10,而前一周的积分值也为-10,则在该特定员工的totalpoints字段的表2中(下表)添加-40。(请参见EmployeeName列)

2.我们再次检查本周和前两周的分数。如果连续三周分数为-10,则奖励该人-100,并将其添加到表2中的总分字段中。(下表)

三,。 同样,对于连续四周,即本周和前3周,如果分数为-10,则将-200添加到表2的总分字段中

employee ID     Employee Name    Total points
1                  Bob             -50
2                  Deepak          110
3                  Brinda          130
4                  Chriss          210
可能的解决方案(故障):

; WITH 
n as (
    select [EmployeeName], CAST(SUBSTRING([Week No.],5,10) AS INT) as wk, Points as pt  
    from YourTable --> Change this to your table
),
sc as (
    select w.*, case w.pt when -10 then (case w1.pt when -10 then (case w2.pt when -10 then (case w3.pt when -10 then -200 else -100 end) else -40 end) else 0 end) else 0 end x
    from n w
    left join n w1 on w.[EmployeeName] = w1.[EmployeeName] and w.wk = w1.wk+1
    left join n w2 on w.[EmployeeName] = w2.[EmployeeName] and w.wk = w2.wk+2
    left join n w3 on w.[EmployeeName] = w3.[EmployeeName] and w.wk = w3.wk+3
),
l as (
    select *, pt+x as total
    from sc
),
s as (
    select [EmployeeName], sum(total) total
    from l
    group by [EmployeeName]
)
select *
from s
有谁能帮助我实现这一目标吗?我正在使用sql server 2012。

WITH cte as (
    SELECT *, 
           LAG([Points], 1) OVER (PARTITION BY [employee ID] ORDER BY [Week No]) as prev1_points,
           LAG([Points], 2) OVER (PARTITION BY [employee ID] ORDER BY [Week No]) as prev2_points,
           LAG([Points], 3) OVER (PARTITION BY [employee ID] ORDER BY [Week No]) as prev3_points
    FROM employee
)
SELECT *,
       CASE WHEN [Points] = -10 AND prev1_points = -10  AND prev2_points = -10  AND prev3_points = -10 
            THEN -200
            WHEN [Points] = -10 AND prev1_points = -10  AND prev2_points = -10 
            THEN -100
            WHEN [Points] = -10 AND prev1_points = -10
            THEN -50
            ELSE 0
       END penalty       
FROM cte
最终输出


您需要检查一下,谢谢您的输入。让我看看@Juancarlosoropeza案3。不应该是-150而不是-200-第一个案例后,每一个案例的分数为50-10?每个案例的分数都会得到奖励。它不相关。无论哪一个案例满足要求,都将运行其相关查询并相应地奖励分数。这就是为什么,奖励的分数可以是-200或-150或-500。我的观点是这个值应该不重要。谢谢@JuanCarloSoropeZa您可以在输出中输入什么值,并将其添加为注释吗?如
--10-10-50-10
并解释原因。谢谢,但我们不是看-10的总数。我们需要检查-10是否连续出现。如果-10连续出现两次,连续出现三次或四次。如果出现
[-10,-10,40,-10,-10]
?连续两周连续两周您的代码检查持续两周。这样,我们需要连续三周或四周(以适用于该员工的为准)。然后将这些点添加到表2中是的,是我的错误尝试猜测您想要的原因。下次请更加努力地解释你的问题。[-10,-10,40,-10,-10]假设这个值是第1周到第5周,那么第2周的罚款-50被添加到表2中,第3周没有罚款,因为它不是连续的-10,持续两周、三周或四周。第4周也会发生同样的情况,因为不是连续的-10。最后一周的罚款是-50。