我正在尝试将单个帐户中的帐户余额从负数变为大于或等于0的实例进行分组。例如,在下表中,account1从负数变为大于或等于0的三倍。我想自动化一种将它们组合在一起并加以区分的方法。下面是我正在使用的示例表
在这一点上,我正在手动进入并使每个实例唯一。以下是理想的结果
这是我的代码,可以手动创建上表:
SELECT DISTINCT acct_nbr,
CASE
WHEN acct_nbr = 'account1' AND row_num BETWEEN 1 AND 3 THEN acct_nbr || 'a' --first instance
WHEN acct_nbr = 'account1' AND row_num BETWEEN 4 AND 5 THEN acct_nbr || 'b' --second instance
WHEN acct_nbr = 'account1' AND row_num BETWEEN 6 AND 7 THEN acct_nbr || 'c' --third instance
ELSE acct_nbr
END AS acct_upt
谢谢!
答案 0 :(得分:1)
嗯,0
不是肯定的。但是,无论如何,每个组似乎都是通过之后的非负值来确定的。但是,这会产生一个递减数字,而您需要一个递增数字。使用dense_rank()
可以轻松修复。
最后,让字母追加没有意义。因此,我将最后一部分添加为单独的列,您可以弄清楚如何将信息与帐号组合在一起:
select acct_nbr,
dense_rank() over (partition by acct_nbr order by grp desc) as modifier,
row_num, sys_dt, end_bal
from (select t.*,
sum(case when end_bal >= 0 then 1 else 0 end) over (partition by acct_nbr order by sys_dt) as grp
from t
) t;