Sql 仅为标志N'创建序列;
我只想在flag='n'时创建一个行号,或者我可以按标志对数据进行排序并对它们进行排序 例如:Sql 仅为标志N'创建序列;,sql,sql-server,tsql,sql-server-2012,Sql,Sql Server,Tsql,Sql Server 2012,我只想在flag='n'时创建一个行号,或者我可以按标志对数据进行排序并对它们进行排序 例如: +-----+-------+-------+ | ID | Flag1 | Flag2 | +-----+-------+-------+ | 100 | N | N | | 100 | N | N | | 100 | Y | N | | 100 | N | Y | | 101 | N | N | | 101 | 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,则最后对它们进行排序。
我怎样才能做到这一点呢?您使用
行编号()和按分区的方法是正确的;以下查询应该可以工作:
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
结果: