I’m having troubles with some sql statement.
I have a table like this:
I couldn’t find any SQL form to do that but I want something like this:
x
SELECT
Col1,
CASE WHEN all(Col2 in ('A','B','C') THEN "auto"
ELSE distinct Col2 not in ('A','B','C') as Col2
FROM mytable
GROUP BY Col1
Obviously the query is not valid SQL, so I explain what I want here: If all registers in a group are A, B or C I want the column value to be “AUTO”, in the other hand, if there is any column value different than A,B or C I want that to be selected.
So the result would have to be:
Col1 Col2
1 AUTO
2 R
Advertisement
Answer
You could use aggregation:
select
col1,
coalesce(max(case when Col2 not in ('A', 'B', 'C') then Col2 end), 'AUTO') Col2
from mytable
group by col1
If all values of Col2
for a given Col1
belong to A/B/C
, then max(case when Col2 not in ('A', 'B', 'C') then Col2 end)
returns null
, which the outer coalesce turns to 'AUTO'
. Else, the maximum value other than A/B/C
is returned.