基于模式sql oracle创建列

乌鸦史密斯

我正在学习窗口函数并试图解决这个问题

表是:

colA         colB           colC         colD
70           3021           1234         a
69           3021           1234         b
68           3021           1234         a
67           3021           5678         a
2            4153           9170         b
1            4153           9170         a

所需的输出是:

colA         colB           colC         colD      output
70           3021           1234         a         2
69           3021           1234         b         (null)
68           3021           1234         a         1
67           3021           5678         a         1
2            4153           9170         b         (null)
1            4153           9170         a         1

我试过的

select *,row_number() over (partition by colB,colC order by colA,colB)
from table;

这将提供整个行号,但只需要 colD=a 的行号

对于一组 colB 和 colC ,只需要在 colD='a' 处生成行号。

例如,对于一组 colB 和 colC(3021 和 1234),输出是增量行号 1 和 2,其中colD=a,否则输出是null

戈登·利诺夫

您可以使用row_number()枚举行并case分配值:

select t.*,
       (case when cold = 'a'
             then row_number() over (partition by colb, cold order by cola)
        end) as output
from t;

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章