Как в sql запросе добавить новое поле со значенем из других полей пропуская NULL

Таблица, выделенный жирным шрифтом

Есть такая вот таблица, нужно вывести список всеx строк, дополнительно к этому создать в результирующем наборе поле с новым названием ‘three’. Поле должно заполняться по следующему правилу:

  1. Если one содержит значение отличное от NULL, то это значение должно отображаться в поле ‘three’
  2. Если one содержит значение NULL, а поле two содержит значение отличное от NULL, в поле ‘three’ должно отображаться значение поля two
  3. Если оба поля one и two содержат NULL значения, в поле ‘three’ должно выводиться 'N/A'. Например при выводе этой таблице должен добавиться еще один столбец 'three' со значениями для id 1 - 2,id 2 - 3 и для id 3 - значение 4.

Ответы (1 шт):

Автор решения: Roman Konoval

Используйте функцию COALESCE для того, чтобы выбрать первое не NULL значение из нескольких:

SELECT *, COALESCE(one, two, 0) AS three
from test

Тут, если и one, two будут NULL - то в результате получим 0. Сделать как вы хотите и возвращать числа в одном случае и строку в другом нельзя, тип колонки фиксированный.

Можно разве что изменить тип колонки three и сделать его текстовым, и тогда придется конвертировать значения из one и two и возвращать их строковое представление вот так:

SELECT *, COALESCE(one::text, two::text, 'N/A') AS three
FROM test
→ Ссылка