在甲骨文条件下增加价值
Posted
技术标签:
【中文标题】在甲骨文条件下增加价值【英文标题】:increasing value with condition on oracle 【发布时间】:2019-08-27 06:55:11 【问题描述】:如何在另一列上添加带有某些条件的增量值(不是汇总)?
我正在使用类似 Oracle 的 DBMS,名为 Tibero,例如我想生成这些数据
ROWNUM GRP_STRT GRP_NO SLBY
1 1 1 1
2 1 1 1
3 1 1 1
4 1 1 1
5 1 1 1
6 1 2 0
7 1 2 0
8 1 3 1
9 1 3 1
10 1 3 1
11 1 4 0
12 1 5 1
SLBY 列是买/卖代码(0=Buy,1=Sell),然后是每一种变化的交易类型,GRP_NO 列增加(但它不按 SLBY 列分组)
SELECT CASE
WHEN ROWNUM = 1 THEN GRP_NO
WHEN ROWNUM <> 1 AND SLBY = LAG(SLBY,1) over (ORDER BY ROWNUM) THEN LAG(GRP_STRT,1) over (ORDER BY ROWNUM) - 1
WHEN ROWNUM <> 1 AND SLBY_DSTN_CD <> LAG(SLBY_DSTN_CD,1) over (ORDER BY ROWNUM) THEN LAG(GRP_STRT,1) over (ORDER BY ROWNUM) + 1
END TARGET_GROUPING
, A.*
FROM SOME_TABLE
我尝试使用该查询,但没有像上图那样得到我想要的,而是生成了一个 GRP_NO,例如 1 1 1 1 1 2 1 1 1 1 2 1 1 1(仅限第一次更改 SLBY)
抱歉我的英语不好和不好的解释,如果需要更多信息,我会解释更多,谢谢你的帮助!
【问题讨论】:
预期输出和实际输出会有帮助 预期输出如附图,实际输出低于查询 请不要图片。我什至无法打开图像。您能否将预期的输出粘贴到您的问题中? 你有 rownum、grp_start 和 slby 列,你想输出 group_no 列,对吗? 您似乎没有指定行顺序的列。 SQL 表代表 无序 集。rownum
是Oracle内置的伪列,所以不算。
【参考方案1】:
据我了解你的问题,
您正在尝试从ROWNUM, GRP_STRT, GRP_NO, and SLBY
计算GRP_NO
。
我为您创建了以下查询。
您可以检查逻辑并将其应用到您的代码中:
SELECT
RN,
GRP_STRT,
SUM(CASE
WHEN PREV_SLBY_DSTN_CD IS NULL
OR PREV_SLBY_DSTN_CD <> SLBY_DSTN_CD THEN 1
END) OVER(
ORDER BY
RN
) AS GRP_NO,
SLBY_DSTN_CD AS SLBY
FROM
(
SELECT
RN,
LAG(SLBY_DSTN_CD) OVER(
ORDER BY
RN
) AS PREV_SLBY_DSTN_CD,
SLBY_DSTN_CD,
GRP_STRT
FROM
(SELECT ROWNUM RN, .... FROM SOME_TABLE) A
)
此代码用于生成问题所示的输出:
ROWNUM GRP_STRT GRP_NO SLBY
1 1 1 1
2 1 1 1
3 1 1 1
4 1 1 1
5 1 1 1
6 1 2 0
7 1 2 0
8 1 3 1
9 1 3 1
10 1 3 1
11 1 4 0
12 1 5 1
干杯!!
【讨论】:
哇好棒!让我先试一试,很好理解,即使我的解释是最糟糕的 :D 等一下...... 优秀的先生!非常感谢!我会尝试将它应用到我的实际查询中。以上是关于在甲骨文条件下增加价值的主要内容,如果未能解决你的问题,请参考以下文章
Oracle Cloud 甲骨文云服务器增加快存储(磁盘分区和扩容)
Left Outer Join 的条件谓词评估较晚,导致性能问题。甲骨文 8i
ORA-01722: 无效编号 当我尝试执行存储过程时。甲骨文错误