我需要为以下场景构建查询:
输入表:
col1 col2 col3 col4
-------------------------------
1 2 a pi
1 4 a ci
1 2 a ci
2 3 a pi
2 4 a ci
1 3 a ci
1 3 a pi
需要逻辑:
从输入表中获取所有记录,但匹配以下条件的记录除外。
如果组(a,b)的值对于多行是相同的,那么只保留具有d ='pi'的行 例如:第1行和第1行3(a,b)=(1,2)的值我们只需要保留第1行,其中d ='pi'。
最终期望的输出:
col1 col2 col3 col4
---------------------------------
1 2 a pi
1 4 a ci
2 3 a pi
2 4 a ci
1 3 a pi
请帮帮我。
答案 0 :(得分:1)
如果您愿意,可以使用分析函数进行处理:
select a, b, c, d
from (select t.*,
row_number() over (partition by a, b
order by (case when d = 'pi' then 1 else 2 end)
) as seqnum
from table t
) t
where seqnum = 1;
答案 1 :(得分:0)
使用where not exists结构:
SELECT * FROM tab1 t
WHERE NOT EXISTS (SELECT 1 FROM tab1
WHERE t.a = a AND t.b = b)
OR d ='pi'