在甲骨文条件下增加价值

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: 无效编号 当我尝试执行存储过程时。甲骨文错误

text 甲骨文把逗号分割的字符串转换为可放入中的条件语句的字符数列

sql 甲骨文把逗号分割的字符串转换为可放入中的条件语句的字符数列