You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Oracle中基于条件生成第二分区序列的实现方案咨询

在Oracle中生成仅对LEVEL≤2行计数的SecondRowNumber列

你可以通过CASE表达式结合窗口函数实现需求,核心思路是仅对LEVEL ≤ 2的行按part_no分区、seq_no排序生成连续序号,其余行返回空值。以下是两种可行的实现方式:

方法一:使用ROW_NUMBER()与条件分区

select 
    seq_no, 
    part_no, 
    row_number() over(partition by part_no order by seq_no) as RowNumber,
    case 
        when LEVEL <= 2 
        then row_number() over(partition by part_no, case when LEVEL <=2 then 1 else 0 end order by seq_no) 
    end as SecondRowNumber,
    level 
from table1

逻辑说明:

  • 内层case when LEVEL <=2 then 1 else 0 end将数据分为两组:符合条件的行标记为1,不符合的标记为0
  • 对part_no和标记值双重分区后,ROW_NUMBER()仅在标记为1的组内按seq_no生成连续序号
  • 外层CASE仅在LEVEL ≤2时显示序号,其余行返回空值

方法二:使用COUNT()累计符合条件的行数

select 
    seq_no, 
    part_no, 
    row_number() over(partition by part_no order by seq_no) as RowNumber,
    case 
        when LEVEL <= 2 
        then count(case when LEVEL <=2 then 1 end) over(partition by part_no order by seq_no rows between unbounded preceding and current row) 
    end as SecondRowNumber,
    level 
from table1

逻辑说明:

  • count(case when LEVEL <=2 then 1 end)仅统计当前行及之前所有符合LEVEL ≤2的行数
  • 窗口子句rows between unbounded preceding and current row确保从分区起始行到当前行的累计计数
  • 外层CASE控制仅在符合条件的行显示计数结果,其余行留空

两种方法均能生成你期望的结果,可根据习惯选择使用。

内容的提问来源于stack exchange,提问作者bbpeterson

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 19:31:15