oracle - 基于前一列值的列值
问题描述
我在 Oracle 上有一个结果集,如下表:
有没有办法添加一个新列,其值基于之前的 TEMREGIONAL 列,如下所示:
311,1,1,0
430,2,0,1
329,3,0,1
我想要的是基于 TEMREGIONAL 值,如果它是 1,那么之后的所有行都将是 1。
所以,如果我有这样的事情:
311,1,0
430,2,0
329,3,1
334,4,0
323,5,0
324,6,0
326,7,0
结果应该是:
311,1,0,0
430,2,0,0
329,3,1,0
334,4,0,1
323,5,0,1
324,6,0,1
326,7,0,1
我想要的是添加一个新列,在第三列值为 1 的行之后,所有行在这个新列中的值都应该为 1。
任何人都可以帮助我吗?
解决方案
您可以使用ignore nulls
加法lag
来查找上一个1
,将零变为null
。这可以一次性完成。
with a( ID_ORGAO_INTELIGENCIA , ORD , TEMREGIONAL ) as ( select 311,1,0 from dual union all select 430,2,0 from dual union all select 329,3,1 from dual union all select 334,4,0 from dual union all select 323,5,0 from dual union all select 324,6,0 from dual union all select 326,7,0 from dual ) select a.* , coalesce( lag(nullif(TEMREGIONAL, 0)) ignore nulls over(order by ord asc) , 0) as prev from a
ID_ORGAO_INTELIGENCIA | 订单 | 区域 | 上一篇 --------------------: | --: | ----------: | ---: 311 | 1 | 0 | 0 430 | 2 | 0 | 0 329 | 3 | 1 | 0 第334章 4 | 0 | 1 323 | 5 | 0 | 1 324 | 6 | 0 | 1 326 | 7 | 0 | 1
db<>在这里摆弄
推荐阅读
- android-studio - Android studio 3.4 花费太多时间来构建项目
- amazon-web-services - 批量上传到 Amazon Redshift
- android - 如何在 Kotlin 中基于一个属性加入两个列表
- node.js - 如何将节点 js 应用程序转移到生产环境中查看实时 api 数据
- sbt - scalajs-bundler 不会创建 *-fastopt-bundler.js.map" 作为值
- google-apps-script - 如何从谷歌表运行独立脚本
- php - 使用ajax处理将日期插入数据库时日期更改(CodeIgniter)
- asp.net - 在 C# cs 文件中使用的角度 $scope 变量
- r - 在 R 库 XLConnect 上需要一些帮助
- windows - Windows JDK8:windows系统什么时候会重用进程对象的句柄值?