You can use an explicit case
expression:
select (case when col1 <> 0 and col1 >= col2 and col1 >= col3 and col1 > =col4 and col1 >= col5 and col1 >= col6 and col1 >= col7
then col1
. . .
end)
This is a lot of typing. It probably suggests that your data is stored incorrectly -- you should have separate rows for each column. You can mimic this by expanding the data and reaggrating:
select name, state, col1, col2, col3, col4, col5, col6, col7,
min(case when col1 <> 0 then col1 end) as min_value,
max(case when col1 <> 0 then col1 end) as max_value,
from ((select t.*, col1 as col from t) union all
(select t.*, col2 as col from t) union all
(select t.*, col3 as col from t) union all
(select t.*, col4 as col from t) union all
(select t.*, col5 as col from t) union all
(select t.*, col6 as col from t) union all
(select t.*, col7 as col from t)
) x
group by name, state, col1, col2, col3, col4, col5, col6, col7;