【发布时间】:2023-04-07 04:44:02
【问题描述】:
我需要创建一个列,每次找到不同的值时都会从 1 开始计数。
这是我的表的示例:
if object_id('tempdb.dbo.#myTable') is not null drop table #myTable
create table #myTable (dates int, flag char)
insert into #myTable values('20181031','V')
insert into #myTable values('20181130','V')
insert into #myTable values('20181231','V')
insert into #myTable values('20190131','F')
insert into #myTable values('20190228','F')
insert into #myTable values('20190331','F')
insert into #myTable values('20190430','F')
insert into #myTable values('20190531','V')
insert into #myTable values('20190630','V')
insert into #myTable values('20190731','V')
select *
from #myTable
order by 1
dates flag
20181031 V
20181130 V
20181231 V
20190131 F
20190228 F
20190331 F
20190430 F
20190531 V
20190630 V
20190731 V
我需要输出如下所示:
dates flag cnt
20181031 V 1
20181130 V 2
20181231 V 3
20190131 F 1
20190228 F 2
20190331 F 3
20190430 F 4
20190531 V 1
20190630 V 2
20190731 V 3
我尝试使用带有子查询的row_number() 的变体,但是当它到达第二组 Vs 时,我无法让它重新开始计数。
我查看了这两个解决方案,但我无法将其推断为我的目的:
Counting rows until where clause condition is saatisfied
Transact-SQL - number rows until condition met
我使用的是 SQL Server 2012
谢谢
【问题讨论】:
-
根据问题指南,请展示您尝试过的内容并告诉我们您发现了什么(在本网站或其他地方)以及为什么它不能满足您的需求。这个问题被称为间隙和孤岛,可以帮助您进行研究。
-
我注意到您已经有一段时间没有接受答案了……有什么原因吗?
-
你应该发布你的实际尝试,而不是仅仅提及它。
-
@DaleK 我添加了研究证据。关于接受答案,我需要再次查看它们,但通常我没有看到适合我的答案。
-
如果某个答案不适合您,您应该评论作者如何以及为什么可以改进他们的答案。
标签: sql sql-server tsql