Oracle SQL 到 Select 行(基于大小写)
Oracle SQL to Select rows based on case
我有一个 table 包含以下字段
ID Category AgingSet Amount
K-218660115 02 STD -159
K-218660115 03 STD 60
K-218660115 04 STD 90
K-218660115 05 STD 6
K-218660115 06 BDSTD 156
我的 sql select 应该 return 最后一行,即
K-218660115 06 BDSTD 156
如果 STD 老化集不为零。如果所有 STD 老化设置都设置为 0 ,我的 SQL select 将 return
K-218660115 02 BDSTD 0
感谢任何帮助。
逻辑似乎有点难以理解。您似乎想要基于 'STD'
值的总和是否为 0
的条件逻辑。
这应该 return 您想要的数据:
select id, category, 'BDSTD' as agingSet, amount
from (select t.*,
row_number() over (partition by id order by category) as seqnum,
sum(case when agingSet = 'Std' and amount <> 0 then 1 else 0 end) over (partition by id) as num_not_zero
from t
) t
where (num_not_zero = 0 and seqnum = 1) or
(num_not_zero > 0 and agingSet = 'BDSTD');
我有一个 table 包含以下字段
ID Category AgingSet Amount
K-218660115 02 STD -159
K-218660115 03 STD 60
K-218660115 04 STD 90
K-218660115 05 STD 6
K-218660115 06 BDSTD 156
我的 sql select 应该 return 最后一行,即
K-218660115 06 BDSTD 156
如果 STD 老化集不为零。如果所有 STD 老化设置都设置为 0 ,我的 SQL select 将 return
K-218660115 02 BDSTD 0
感谢任何帮助。
逻辑似乎有点难以理解。您似乎想要基于 'STD'
值的总和是否为 0
的条件逻辑。
这应该 return 您想要的数据:
select id, category, 'BDSTD' as agingSet, amount
from (select t.*,
row_number() over (partition by id order by category) as seqnum,
sum(case when agingSet = 'Std' and amount <> 0 then 1 else 0 end) over (partition by id) as num_not_zero
from t
) t
where (num_not_zero = 0 and seqnum = 1) or
(num_not_zero > 0 and agingSet = 'BDSTD');