我有一个名为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依次出现,则一一加。结果就像
OutcomeId
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
帮我得到结果。
您可以使用以下查询:
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。
grp
OutComeID
'16'
0
演示在这里