尝试根据两个单独列中的排名值创建一个标志
Trying to create a flag based on ranking values in two separate columns
我有一个查询,其中某些 ID 有重复的行,但有两个不同的列由 window 函数创建,需要根据特定顺序为每一行创建一个标志。我在下面提供了数据的示例。
我有一个 RANK_ONE 列,其中 return 是一个排名值或空值,并不是每个 ID 都有一个值,但如果它有一个值,我需要它 return 1 表示包含 1 的行。
RANK_TWO 列基本相同,但如果尚未从 RANK_ONE 中为同一 ID 标记 1,我需要标记第 1 行。
PRIMARY 列是我想要的结果。有什么想法吗?
我不知道我是不是在查询中查询的时间太长,看不到眼前的简单解决方案,但它让我抓狂。
你似乎想要 rank_one
如果它是 id
的每 1 否则 rank_two
:
select t.*,
(case when max(case when rank_one = 1 then 1 else 0 end) over (partition by id) = 1 and rank_one = 1 then 1
when max(case when rank_one = 1 then 1 else 0 end) over (partition by id) = 1 then 0
when rank_two = 1 then 1
else 0
end) as primary
from t;
我有一个查询,其中某些 ID 有重复的行,但有两个不同的列由 window 函数创建,需要根据特定顺序为每一行创建一个标志。我在下面提供了数据的示例。
我有一个 RANK_ONE 列,其中 return 是一个排名值或空值,并不是每个 ID 都有一个值,但如果它有一个值,我需要它 return 1 表示包含 1 的行。
RANK_TWO 列基本相同,但如果尚未从 RANK_ONE 中为同一 ID 标记 1,我需要标记第 1 行。
PRIMARY 列是我想要的结果。有什么想法吗?
我不知道我是不是在查询中查询的时间太长,看不到眼前的简单解决方案,但它让我抓狂。
你似乎想要 rank_one
如果它是 id
的每 1 否则 rank_two
:
select t.*,
(case when max(case when rank_one = 1 then 1 else 0 end) over (partition by id) = 1 and rank_one = 1 then 1
when max(case when rank_one = 1 then 1 else 0 end) over (partition by id) = 1 then 0
when rank_two = 1 then 1
else 0
end) as primary
from t;