Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 基于数量更改创建顺序递增的组_Sql_Oracle_Grouping_Rank_Partition - Fatal编程技术网

Sql 基于数量更改创建顺序递增的组

Sql 基于数量更改创建顺序递增的组,sql,oracle,grouping,rank,partition,Sql,Oracle,Grouping,Rank,Partition,如何在oracle SQL中编写此代码? 我有以下数据 我想生成一个如下所示的结果: 因此,我基本上希望组ID随着行号变回1而增加。我试图使用row_number、rank()和partition函数,但它不能正常工作。急需帮助! 谢谢 编辑(戈登): 原来的问题有问题的数据。将问题中的值作为文本比引用图像要好得多,因此我将其添加回: Code Row Number 214 1 214 2 210 1 210 2 210 3 214 1

如何在oracle SQL中编写此代码? 我有以下数据

我想生成一个如下所示的结果:

因此,我基本上希望组ID随着行号变回1而增加。我试图使用row_number、rank()和partition函数,但它不能正常工作。急需帮助! 谢谢

编辑(戈登):

原来的问题有问题的数据。将问题中的值作为文本比引用图像要好得多,因此我将其添加回:

Code   Row Number
214     1
214     2
210     1
210     2
210     3
214     1
我想生成一个如下所示的结果:

Code   Row Number  Group Id
214     1          1
214     2          1
210     1          2
210     2          2
210     3          2
214     1          3

为了完成所需的操作,需要一个列来指定表中行的顺序。让我假设你有一个id或创建日期或类似的东西

如果是这样,那么您想要的只是第二列为1的次数的累积和:

select t.*,
       sum(case when RowNumber = 1 then 1 else 0 end) over (order by id) as GroupId
from t;

还不清楚哪个字段是ID,因为如果它是如您所说的rownumber,它将无法按照您在预期输出中的方式工作

create table test (id int , code int, rownumber int);
insert into test values (1,214,1);
insert into test values (2,214,2);
insert into test values (3,210,1);
insert into test values (4,210,2);
insert into test values (5,210,3);
insert into test values (6,214,1);


select s.code,  sum(add_group) over (order by id) from (
select id, code, case when rownumber=1 then 1 else 0 end as add_group from test
order by id
) s

    CODE    SUM(ADD_GROUP)OVER(ORDERBYID)
1   214 1
2   214 1
3   210 2
4   210 2
5   210 2
6   214 3

顺便说一句,@Gordon Linoff的asnwer工作得更好,完全符合您的需要,但是您需要为order by添加额外的字段

SQL表本身就是无序的。哪列指定排序?行号列行号列重复值。它没有指定行的顺序。所以,你能澄清一下我是oracle sql新手吗?你能告诉我结果是什么样子吗。@user3056152。它们看起来与您问题中的第二个表完全相同(尽管可能有更多的列,这取决于
t
的实际外观)。。。您需要额外的ID列来对结果进行排序谢谢我想我的问题是行号列编号没有在代码更改时重新启动。有没有人知道如何做到这一点。谢谢,你是对的,它确实起作用了。数据在我的实际数据集中略有不同,这就是为什么它看起来不起作用的原因。