oracle语句查询

image.png

如图,请问大佬们有没有语句可以实现:根据列1/2,求列3,

1、列2中为Y的行为主要列,当列2为Y时,列3显示Y对应列1的数字,直到下一个Y出现;

2、当Y出现后列3数字更新为最新Y对应列1中的数字

FineReport yzm358821 发布于 2024-3-11 15:29
1min目标场景问卷 立即参与
回答问题
悬赏:3 F币 + 添加悬赏
提示:增加悬赏、完善问题、追问等操作,可使您的问题被置顶,并向所有关注者发送通知
共2回答
最佳回答
0
JL98Lv6中级互助
发布于2024-3-11 16:19

WITH your_table AS (

SELECT  1 AS col1, 'Y' AS col2 FROM dual

union ALL

SELECT  2 AS col1, NULL AS col2 FROM dual

union ALL

SELECT  3 AS col1, NULL AS col2 FROM dual

union ALL

SELECT  4 AS col1, NULL AS col2 FROM dual

UNION ALL 

SELECT  5 AS col1, 'Y' AS col2 FROM dual

union ALL

SELECT  6 AS col1, NULL AS col2 FROM dual

union ALL

SELECT  7 AS col1, NULL AS col2 FROM dual

union ALL

SELECT  8 AS col1, NULL AS col2 FROM dual

)

SELECT 

    col1,

    col2,

    CASE 

        WHEN col2 = 'Y' THEN col1

        ELSE LAST_VALUE(CASE WHEN col2 = 'Y' THEN col1 END IGNORE NULLS) 

             OVER (ORDER BY col1 ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW)

    END AS col3

FROM 

    your_table

ORDER BY 

    col1;

image.png

最佳回答
0
用户W4933403Lv5见习互助
发布于2024-3-11 16:34

with a as(

select rownum a,case when rownum in (1,5,9,16) then 'Y' else '' end  b from dual connect by rownum < 17

)

, t1 as (select a,b,ROWNUM rn from a)

,t2 as (select * from t1 where b='Y')

,t3 as (select t1.rn,max(t2.rn) as rn1 from t1 left join t2 on t1.rn>=t2.rn group by t1.rn)

select t1.a,t1.b,t2.a from t1 left join t3 on t1.rn=t3.rn

left join t2 on t2.rn=t3.rn1

image.png

  • yzm358821 yzm358821(提问者) 谢谢回复,最终确定还是第一个人使用的 LAST_VALUE函数较为快捷
    2024-03-11 16:51 
  • 4关注人数
  • 206浏览人数
  • 最后回答于:2024-3-11 16:34
    请选择关闭问题的原因
    确定 取消
    返回顶部