我想逐列选择不同/分组,并在第二列中只显示一个值(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
答案 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;