我有一张这样的桌子:
|-------|----------|------------|-----------|------------|
| M_ID | YEAR | NEW_M_ID |STATUS_CODE|GROUP_NUMBER|
|-------|----------|------------|-----------|------------|
|111 |2010 |111-2010 | 0 | |
|111 |2011 |111-2011 | 0 | |
|111 |2013 |111-2013 | 1 | |
|111 |2014 |123-2014 | 0 | |
|123 |2009 |123-2009 | 0 | |
|123 |2010 |123-2010 | 3 | |
|123 |2014 |123-2014 | 0 | |
|-------------------------------------------|------------|
我想在其他列的基础上填充group_number列中的值。 所需的输出应如下所示:
|-------|----------|------------|-----------|------------|
| M_ID | YEAR | NEW_M_ID |STATUS_CODE|GROUP_NUMBER|
|-------|----------|------------|-----------|------------|
|111 |2010 |111-2010 | 0 | 1 |
|111 |2011 |111-2011 | 0 | 1 |
|111 |2013 |111-2013 | 1 | 1 |
|111 |2014 |123-2014 | 0 | 2 |
|111 |2015 |123-2015 | 0 | 2 |
|123 |2010 |123-2010 | 3 | 1 |
|123 |2014 |123-2014 | 0 | 2 |
|-------------------------------------------|------------|
我使用的代码是这样的:
declare
group_num number:=1;
old_acct CHAR(15):=' ' ;
short_acct_number CHAR (10):= ' ';
begin
for i in (
select ACCT_NUMBER, status from xxx.transaction
order by acct_number
)
loop
short_acct_number := SUBSTR(i.ACCT_NUMBER, 1, LENGTH(i.ACCT_NUMBER)-5);
if short_acct_number <> old_acct then
group_num := 1;
end if;
if i.status <> 0 then
update xxx.transaction set group_number = group_num
where acct_number <= i.acct_number
and group_number is null;
group_num := group_num + 1;
end if;
old_acct := short_acct_number;
end loop;
end;
我的代码存在问题,因为它没有在第6行中将group_number填充为1,这是错误的。
有人可以帮忙吗?
答案 0 :(得分:0)
在查询输出下方发送。
select ACCT_NUMBER, status from xxx.transaction
order by acct_number
答案 1 :(得分:0)
现在这就是代码计算的工作方式 声明:
group_num = 1 old_acct =‘
循环
迭代1和2状态代码= 0不会进入循环
设置old_acct = short_acct_number
对于迭代3,状态码= 1进入循环
设置group_num = group_num + 1 = 1 + 1 = 2
对于迭代4和5,状态码= 0不会进入循环
对于迭代6,输入状态代码并更新group_number = group_num
如上所述,在迭代3中将其设置为值2。这就是为什么在第六列中没有获得Group_Number为1的原因。 如果确切的答案是1,则需要修正group_num的计算方法,但此时,您没有给我们提供设置group_number的逻辑。 也在光标上
Select Acct_Number , status from xxx.transaction
如果您的xxx.transaction表仅包含上面提到的列,则我们无法理解其逻辑,请也分享有关此信息的更多信息。