sql - 如何获得条件序列
问题描述
我对 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 方法得到这样的结果。请检查我的问题。谢谢你。
解决方案
您可以使用如下分析函数:
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
推荐阅读
- html - 将鼠标悬停在父 div 上时 CSS 淡化子元素,然后将鼠标悬停在子元素上时再次更改
- vue.js - 从另一个模块访问 vuex 模块状态
- python - 如何将我的 Google Blogger 文件导入 Pelican 而不会出错?
- hyperledger - 超级账本节点的更好做法是什么……?
- ios - iOS 以编程方式获取 Eve Motion 传感器状态
- ios - 从 pod 安装框架后,无法在 Swift 项目的类中导入,抛出错误 no such module swift import
- html - Google 表格公式中的 ImportXml Xpath
- javascript - Nativescript Vue.js 定位 GPS
- phpmyadmin - phpMyAdmin 4.8.4 身份验证应用程序 (2FA)
- javascript - 将纯文本值的行加载到字符串数组中