如何获得此场景的预期结果[SQL]

时间:2015-01-28 18:26:03

标签: sql oracle

我需要为以下场景构建查询:

输入表:

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

请帮帮我。

2 个答案:

答案 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'