sql - 仅为标志 N ' 创建序列
问题描述
我只想在 flag='n' 时创建一个行号,或者我可以按标志对数据进行排序并对其进行排名。
例如:
+-----+-------+-------+
| ID | Flag1 | Flag2 |
+-----+-------+-------+
| 100 | N | N |
| 100 | N | N |
| 100 | Y | N |
| 100 | N | Y |
| 101 | N | N |
| 101 | N | Y |
+-----+-------+-------+
输出:
+---------+-----+-------+-------+
| Seq_num | ID | flag1 | flag2 |
+---------+-----+-------+-------+
| 1 | 100 | N | N |
| 2 | 100 | N | N |
| 3 | 100 | Y | N |
| 4 | 100 | N | Y |
| 1 | 101 | N | N |
| 2 | 101 | N | Y |
+---------+-----+-------+-------+
我已经使用 row_number() 和 partition by 编写了一个查询,但这不会检查标志。基本上,我需要先按标志对数据进行排序。如果其中一个标志或两者都是 Y,则最后对它们进行排序。我怎样才能做到这一点 ?
解决方案
你在正确的轨道row_number()
上partition by
; 以下查询应该有效:
declare @tmp table(ID int, Flag1 char(1), Flag2 char(1))
insert into @tmp values
(100, 'N','N')
,(100, 'N','N')
,(100, 'Y','N')
,(100, 'N','Y')
,(101, 'N','N')
,(101, 'N','Y')
select row_number() over(partition by ID order by id, flag2, flag1) as Seq_num,
ID,
flag1,
flag2
from @tmp
结果:
推荐阅读
- python - 如何根据其他列向熊猫数据框添加新行?
- excel - 突出显示基于其他单元格值的单元格
- http - Lighttpd 不从 CentOS 7 获取本地环境变量
- python - 使用 Turtle 绑定按键事件
- python - 从 Tensorboard 上保存的 .pbtxt 文件中查看图形
- python - 将函数应用于数组,其中函数的一个因素取决于数组的行索引
- sql - SQL Oracle 仅返回列值的最大值(值)
- r - R:`[.data.frame`(frame, predictors) 中的决策树错误:选择了未定义的列
- java - 为什么我的程序为数组的每个索引创建相同的链表?
- c++ - 如何将 cvCreateImage 转换为 cv::mat