Всякий раз, когда вы пытаетесь что-то сделать с множествами столбцов, вы, вероятно, ошиблись своей схемой.
Почти наверняка было бы проще разделить A, B, C и D на отдельные строки в отдельной таблице, привязать их обратно к строке в исходной таблице и создать запрос JOIN
-типа.
В качестве альтернативы, если только один из них не равен NULL, я бы выбрал два столбца: тип (A, B, C или D) и значение. Тогда вы не тратите впустую столбцы в каждой строке, и запросы становятся неизмеримо проще (при условии, что типы одинаковы).
Однако, вы можете сделать это с помощью case
:
select case
when A is not null then 'A'
when B is not null then 'B'
when C is not null then 'C'
else 'D'
end
from ...
Синтаксис может быть не совсем правильным, вам нужно его найти. Обычно это не то, чем я занимаюсь, так как считаю это плохой идеей (функции для отдельных строк в select никогда хорошо не масштабируются).