问题描述
我需要根据第二列的值创建一个标志字段。
ID1 ID2 FLAG
1 19 1
1 37 1
2 19 2
2 37 2
2 98 1
3 19 1
4 37 1
5 19 1
5 37 1
6 37 2
6 98 1
即当 ID2 为 98 时,标志为 1 否则当他们在 19、37 然后是 1 但是当 ID1 具有所有 ID2 时,则 98 获得优先级,就像上面示例中的 ID1 = 2 一样。
到目前为止,我正在尝试分组,获取 max() 然后设置值。 我尝试了 RANK() 方法,但 19、37 的排名应该相同,但我不确定如何做到这一点。
提前致谢..
解决方法
如果我理解正确,你想要dense_rank()
:
select t.*,dense_rank() over (partition by id1
order by (id2 = 98) desc
) as flag
from t;