Oracle:基于周期更新 select
Oracle: Update based on cyclical select
我很难找出以下 table 的 oracle 查询,我必须根据以下条件进行更新。
要求:
这里的key是account_number 基于account_number ,如果账户有多个user_numbers并且其中有user_numbers 如果任何 user_number 没有关联到除密钥以外的任何其他帐户,请将 user_number 状态更新为 'I',并保留具有多个帐户的 user_number(可以有密钥加上其他帐户),因为它 is.If 帐户只有一个用途,不要做任何事情。
create table cust_account(user_number number(10),account_number number(10),stat char(1));
Insert into cust_account(user_number,account_number,stat)values(123,345,'A')
Insert into cust_account(user_number,account_number,stat)values(226,345,'A')
Insert into cust_account(user_number,account_number,stat)values(226,456,'A')
Insert into cust_account(user_number,account_number,stat)values(556,767,'A')
提交;
输入:
预期输出;
这里 account_number 345 有两个 user_numbers 而其中 123 用户只有一个帐户被停用。
而 767 只有一种用途,所以在更新时甚至不要 select 它。
在此先感谢您的帮助。
如果你想要一个update
查询,那么我会推荐一个相关的子查询:
update cust_account ca
set stat = 'I'
where stat = 'A'
and exists (select 1
from cust_account ca1
where ca1.stat = 'A'
and ca1.account_number = ca.account_number
and ca1.user_number > ca.user_number)
如果你想要 select
,那么使用 row_number()
:
select ca.*,
case when stat = 'A' and row_number() over(partition by account_number, stat order by user_number desc) > 1
then 'I'
else stat
end new_stat
from cust_account ca
我很难找出以下 table 的 oracle 查询,我必须根据以下条件进行更新。
要求:
这里的key是account_number 基于account_number ,如果账户有多个user_numbers并且其中有user_numbers 如果任何 user_number 没有关联到除密钥以外的任何其他帐户,请将 user_number 状态更新为 'I',并保留具有多个帐户的 user_number(可以有密钥加上其他帐户),因为它 is.If 帐户只有一个用途,不要做任何事情。
create table cust_account(user_number number(10),account_number number(10),stat char(1));
Insert into cust_account(user_number,account_number,stat)values(123,345,'A')
Insert into cust_account(user_number,account_number,stat)values(226,345,'A')
Insert into cust_account(user_number,account_number,stat)values(226,456,'A')
Insert into cust_account(user_number,account_number,stat)values(556,767,'A')
提交;
输入:
预期输出;
这里 account_number 345 有两个 user_numbers 而其中 123 用户只有一个帐户被停用。
而 767 只有一种用途,所以在更新时甚至不要 select 它。
在此先感谢您的帮助。
如果你想要一个update
查询,那么我会推荐一个相关的子查询:
update cust_account ca
set stat = 'I'
where stat = 'A'
and exists (select 1
from cust_account ca1
where ca1.stat = 'A'
and ca1.account_number = ca.account_number
and ca1.user_number > ca.user_number)
如果你想要 select
,那么使用 row_number()
:
select ca.*,
case when stat = 'A' and row_number() over(partition by account_number, stat order by user_number desc) > 1
then 'I'
else stat
end new_stat
from cust_account ca