sql server中如何根据条件生成序列号

sql server中如何根据条件生成序列号,sql,sql-server,Sql,Sql Server,我需要根据分数1或0显示一个新的序列列值 MonthlyDate Score New Sequence ----------- ------ ---------- 2019-08-01 1 0 2019-08-02 0 1 2019-08-03 0 2 2019-08-04 0 3 2019-08-05 1 0 2019-08-06 0 1 2019-08-07 0 2 2019-08-08

我需要根据分数1或0显示一个新的序列列值

MonthlyDate Score  New Sequence
----------- ------ ----------
2019-08-01   1      0
2019-08-02   0      1
2019-08-03   0      2
2019-08-04   0      3
2019-08-05   1      0
2019-08-06   0      1
2019-08-07   0      2
2019-08-08   0      3
我试图在我的项目中实现基于新序列值的计算

我已尝试对(按日期排序的行前面无限制)求和(分数)


我使用mysql是因为它是一个在线工具,但在sql server中非常类似

with cte as (
    SELECT *, SUM(Score) OVER (ORDER BY MonthlyDate) as grp
    FROM scores
)
SELECT *, ROW_NUMBER() OVER (PARTITION BY grp ORDER BY MonthlyDate) as new_seq
FROM cte
输出

| MonthlyDate         | Score | New_Sequence | grp | new_seq |
| ------------------- | ----- | ------------ | --- | ------- |
| 2019-08-01 00:00:00 | 1     | 0            | 1   | 1       |
| 2019-08-02 00:00:00 | 0     | 1            | 1   | 2       |
| 2019-08-03 00:00:00 | 0     | 2            | 1   | 3       |
| 2019-08-04 00:00:00 | 0     | 3            | 1   | 4       |
| 2019-08-05 00:00:00 | 1     | 0            | 2   | 1       |
| 2019-08-06 00:00:00 | 0     | 1            | 2   | 2       |
| 2019-08-07 00:00:00 | 0     | 2            | 2   | 3       |
| 2019-08-08 00:00:00 | 0     | 3            | 2   | 4       |

你为什么尝试求和(分数)<代码>分数为0。一堆零的和将是零。这是我最糟糕的部分,我不会那样做。请看我的实际提问。因此,当分数=1时,新序列重置为0?@Jamiec,答案是肯定的。实现我的序列从1开始,你可以做
-1+行数()
我希望分数为1时,新序列应重置为0。你看到我以前的评论了吗?你真的需要我更新我的答案吗?谢谢,它工作得很好。如果你想更新答案那就太好了。再次感谢@scsimon我知道,但没有文本到DDL:(
| MonthlyDate         | Score | New_Sequence | grp | new_seq |
| ------------------- | ----- | ------------ | --- | ------- |
| 2019-08-01 00:00:00 | 1     | 0            | 1   | 1       |
| 2019-08-02 00:00:00 | 0     | 1            | 1   | 2       |
| 2019-08-03 00:00:00 | 0     | 2            | 1   | 3       |
| 2019-08-04 00:00:00 | 0     | 3            | 1   | 4       |
| 2019-08-05 00:00:00 | 1     | 0            | 2   | 1       |
| 2019-08-06 00:00:00 | 0     | 1            | 2   | 2       |
| 2019-08-07 00:00:00 | 0     | 2            | 2   | 3       |
| 2019-08-08 00:00:00 | 0     | 3            | 2   | 4       |