首页 > 解决方案 > 如何获得条件序列

问题描述

我对 SQL Server 中的序列函数有疑问。

首先,我创建了一个基表。这是我的代码。

CREATE TABLE TEST2(
    SEQ int IDENTITY (1, 1) NOT NULL,
    Dates date,
    CNT int,
)
INSERT INTO TEST2 (Dates, CNT)
VALUES 
('2020-01-01', 0),
('2020-01-02', 0),
('2020-01-03', 0),
('2020-01-04', 1),
('2020-01-05', 0),
('2020-01-06', 1),
('2020-01-07', 0),
('2020-01-08', 0),
('2020-01-09', 0),
('2020-01-10', 0),
('2020-01-11', 0),
('2020-01-09', 2),
('2020-01-10', 0),
('2020-01-11', 0)

这是我的尝试代码。

CASE WHEN CNT != 0
THEN 0
ELSE CNT = 0
THEN (ROW_NUMBER() OVER(ORDER BY Dates))
END NEW_SEQ

它由两列(日期,CNT)组成。我想使用 WHEN CASE 表达式得到以下结果。

这是我的示例结果。

序列 日期 碳纳米管 NEW_SEQ
1 2020-01-01 0 0
2 2020-01-02 0 2
3 2020-01-03 0 3
4 2020-01-04 1 0
5 2020-01-05 0 1
6 2020-01-06 1 0
7 2020-01-07 0 1
8 2020-01-08 0 2
9 2020-01-09 0 3
10 2020-01-10 0 4
11 2020-01-11 0 5
12 2020-01-09 2 0
13 2020-01-10 0 1
14 2020-01-11 0 2

我想使用 CASE WHEN 方法得到这样的结果。请检查我的问题。谢谢你。

标签: sqlsql-servertsql

解决方案


您可以使用如下分析函数:

select t.Dates, t.CNT, 
       row_number() over (partition by sm order by seq) - 1 as NEW_SEQ
from
(select t.*,
       sum(case when cnt = 0 then 0 else 1 end) over (order by seq) as sm
  from test t) t

推荐阅读