选择不同列,优先级第二列值

时间:2014-05-19 12:15:33

标签: oracle group-by distinct

我想逐列选择不同/分组,并在第二列中只显示一个值(3个可能的优先级)优先级:如果A出现在组中,则显示它,如果不显示{{1} },如果没有显示B

这是表格:

C

RESULT

A       B
----    -----
FST     A
FST     B
FST     C
INCS    C
INCS    B
ASW     A
AWR     C
WER     C   
WER     C
WER     B

1 个答案:

答案 0 :(得分:4)

对于您的给定数据,最简单的方法是:

select A, min(B)
from table t
group by A;

对于字母排序不正确的更普遍的问题(如果你想在'A'之前返回'B',比如说),你可以用case语句做到这一点:

select A,
       (case min(case B when 'A' then 1 when 'B' then 2 when 'C' then 3 else 4 end)
             when 1 then 'A'
             when 2 then 'B'
             when 3 then 'C'
             else '???'
        end)
from table t
group by A;

编辑:

Oracle比嵌套选择更简单:

select A,
       max(B) keep (dense_rank first
                    order by (case B when 'A' then 1 when 'B' then 2 when 'C' then 3 else 4 end)
                   ) as BestB
from table t
group by A;