sql server中如何根据条件生成序列号
我需要根据分数1或0显示一个新的序列列值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
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 |