如何在另一列上添加具有某些条件的增量值(而不是摘要)?
我使用类似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,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1
为我的糟糕英语和糟糕的解释道歉,如果需要进一步的信息,我会解释更多,谢谢你的帮助!
发布于 2019-08-27 09:03:06
据我所知你的问题,
您正在尝试从GRP_NO中计算ROWNUM, GRP_STRT, GRP_NO, and SLBY。
我已经为您创建了以下查询。
您可以检查逻辑并相应地将其应用于代码中:
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干杯!!
https://stackoverflow.com/questions/57669131
复制相似问题