小编典典

比较当前行与SQL Server中的上一行

sql

我有一个名为team的表,如下所示:我只是在第三列中添加了row_number

RaidNo  OutComeID   RN
2           15      1
4           15      2
6           14      3
8           16      4
10          16      5
12          14      6
14          16      7
16          15      8
18          15      9
20          16      10
22          12      11
24          16      12
26          16      13
28          16      14
30          15      15
32          14      16
34          13      17

OutcomeId16出现时,则以1开头,而16依次出现,则一一加。结果就像

RaidNo  OutComeID   RN  Result
2           15      1   0
4           15      2   0
6           14      3   0
8           16      4   1
10          16      5   2
12          14      6   0
14          16      7   1
16          15      8   0
18          15      9   0
20          16      10  1
22          12      11  0
24          16      12  1
26          16      13  2
28          16      14  3
30          15      15  0
32          14      16  0
34          13      17  0

帮我得到结果。


阅读 170

收藏
2021-03-23

共1个答案

小编典典

您可以使用以下查询:

SELECT RaidNo, OutComeID, RN,
       CASE 
          WHEN OutComeID <> 16 THEN 0
          ELSE ROW_NUMBER() OVER (PARTITION BY OutComeID, grp ORDER BY RN) 
       END AS Result
FROM (
   SELECT RaidNo, OutComeID, RN,
          RN - ROW_NUMBER() OVER (PARTITION BY OutComeID ORDER BY RN) AS grp
   FROM mytable) AS t
ORDER BY RN

字段grp标识具有相同OutComeID值的连续记录的切片(也称为孤岛)。外部查询用于grp枚举属于'16'切片的每个记录。属于其他切片的记录被分配了值0

演示在这里

2021-03-23