如何在oracle SQL中对此进行编码? 我有以下数据 Current Result
我想生成一个如下所示的结果: Desired Result
所以,我基本上希望组ID随着行号变回1而增加。我正在尝试使用row_number,rank()和分区函数,但它无法正常工作。不顾一切地寻求帮助! 感谢
编辑(戈登):最初的问题是有问题的数据。将问题中的值作为文本而不是引用图像要好得多,所以我将其添加回来:
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
答案 0 :(得分:0)
为了做你想做的事,你需要一个列来指定表中行的顺序。我假设你有一个id或创建日期或类似的东西。
如果是这样,那么你想要的只是第二列为1的次数的累积和:
select t.*,
sum(case when RowNumber = 1 then 1 else 0 end) over (order by id) as GroupId
from t;
答案 1 :(得分:0)
目前还不清楚哪个字段是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工作得更好,完全符合您的要求,但您需要添加额外的字段以供订购