我正在学习窗口函数并试图解决这个问题
表是:
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] 删除。
我来说两句