Parece que você quer algo como
SELECT least( (case when col1 is null or col1 = 0 then 999999999 else col1 end),
(case when col2 is null or col2 = 0 then 999999999 else col2 end),
(case when col3 is null or col3 = 0 then 999999999 else col3 end) )
FROM <<table name>>
em que 999999999 é algum valor numérico grande o suficiente para sempre ser maior do que qualquer outro valor válido. Se for possível que todas as três colunas tenham
NULL
ou 0 valores, então você provavelmente gostaria de adicionar uma verificação adicional que se o resultado desse least
função é 999999999 que você retorna 0 ou NULL
ou qualquer outra coisa que faça sentido. @X-Zero teve a gentileza de montar um exemplo do SQL Fiddle funcional desta construção. Observe que o exemplo dele está filtrando as linhas onde todas as três colunas têm
NULL
ou 0 valores.