Oracle 选择不同的列,优先级第二列值
我想选择distinct/group by column,并为第二列只显示一个值(3个可能的值中的一个):如果Oracle 选择不同的列,优先级第二列值,oracle,group-by,distinct,Oracle,Group By,Distinct,我想选择distinct/group by column,并为第二列只显示一个值(3个可能的值中的一个):如果A出现在组中,则显示它;如果不显示B,如果不显示C 这是表格: A B ---- ----- FST A FST B FST C INCS C INCS B ASW A AWR C WER C WER C WER B 结果 A B ---- ----- FST
A
出现在组中,则显示它;如果不显示B
,如果不显示C
这是表格:
A B
---- -----
FST A
FST B
FST C
INCS C
INCS B
ASW A
AWR C
WER C
WER C
WER B
结果
A B
---- -----
FST A
INCS B
ASW A
AWR C
WER B
对于给定的数据,最简单的方法是:
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;
对于给定的数据,最简单的方法是:
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;
您使用的是特定风格的sql吗?oracle 11g,尽可能优化。.您使用的是特定风格的sql吗?oracle 11g,尽可能优化。.是否有一种方法可以将
LIKE
操作符集成到case
操作中?@nir:是的<代码>当B喜欢“A%”时的大小写,然后是1当B喜欢“B%”时的大小写,然后是2…有没有办法将like
操作符集成到CASE
操作中?@nir:有<代码>当B喜欢“A%”时为1,当B喜欢“B%”时为2…