sql - 如何为选择查询中的重复行创建序列号?

标签 sql oracle

我有一个名为 Test 的表,其中包含一些重复的行和名为 Col1 的列。当点击 A 时,序列将重置为 0。我想创建一个序列 no 作为结果,如下所示:

Col1:
A
B
B
B
A
B
B
B
B

结果:

0
1
2
3
0
1
2
3
4

--我使用过的查询

SELECT COL1, CASE COL1 WHEN 'A' THEN '0' ELSE TO_CHAR(ROWNUM-0) END AS RESULT 
FROM TEST

只会生成:

结果:

0
2
3
4
0
6
7
8
9

最佳答案

这里,col1 在您的问题中是这样排序的,因此必须有一些定义此顺序的标准。假设标准是 PK 列。

因此,我正在考虑存在 PK 列,如您的问题所示,col1 的排序依据是该列。

您可以使用以下查询:

Select col1, 
       row_number() over (partition by sum_A order by col1) - 1 as result 
from
  (Select col1, 
          sum(case when col1 = 'A' Then 1 END) over (order by PK) as sum_A
   from test)

DB<>FIDDLE DEMO

干杯!!

关于sql - 如何为选择查询中的重复行创建序列号?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57566509/

相关文章:

php - 选择每种类型的多个项目

MySQL查询帮助。 (从哪里删)

c# - 为什么此存储过程不更新数据库中的数据?

oracle - 如何使用参数 'table of foo' 执行 SP?

sql - Oracle Sql Developer "string literal too long"错误

sql - Oracle 作业 - LPAD/RPAD 错误?

sql-server - 使用 EXPLAIN 命令验证 CREATE TABLE DDL 的语法

php - 如何将数据从 Html 按钮发送到 php 命令

sql - 每周分组数据

sql - 具有多个 COUNT(DISTINCT xxx) 的 PL/SQL SELECT - 意外结果