Nói chung, một giải pháp thay thế case when ...
là coalesce(nullif(x,bad_value),y)
(không thể được sử dụng trong trường hợp của OP). Ví dụ,
select coalesce(nullif(y,''),x), coalesce(nullif(x,''),y), *
from ( (select 'abc' as x, '' as y)
union all (select 'def' as x, 'ghi' as y)
union all (select '' as x, 'jkl' as y)
union all (select null as x, 'mno' as y)
union all (select 'pqr' as x, null as y)
) q
cho:
coalesce | coalesce | x | y
abc | abc | abc |
ghi | def | def | ghi
jkl | jkl | | jkl
mno | mno | | mno
pqr | pqr | pqr |
(5 rows)