SQL Выбор между двумя полями в зависимости от значения одного поля - PullRequest
12 голосов
/ 26 мая 2010

Я использую базу данных PostgreSQL, и в таблице, представляющей некоторые измерения, у меня есть два столбца: измерение и интерполированное. В первом случае я наблюдал (измерял), а во втором интерполировал значение в зависимости от близких значений. Каждая запись с исходным значением имеет также интерполированное значение. Однако существует много записей без «исходных» наблюдений (NULL), поэтому значения интерполируются и сохраняются во втором столбце. Таким образом, в базе данных всего два случая:

Value  Value  
NULL   Value

Конечно, предпочтительно использовать значение из первого столбца, если оно доступно, поэтому мне нужно создать запрос для выбора данных из первого столбца, и, если он недоступен (NULL), тогда база данных возвращает значение из второго столбца для рассматриваемой записи. Я понятия не имею, как построить запрос SQL.

Пожалуйста, помогите. Спасибо.

Ответы [ 2 ]

31 голосов
/ 26 мая 2010

Вы можете использовать Coalesce:

Функция COALESCE возвращает первый из своих аргументов, который не является нулевым. Null возвращается, только если все аргументы имеют значение null.

Select Coalesce( first_value, second_value )
From your_table

Это вернет first_value, если это не NULL, second_value в противном случае.

8 голосов
/ 26 мая 2010

Питер прибил его. Но для полноты (название вашего вопроса является более общим, чем ваша конкретная проблема), здесь приведены документы для нескольких условных выражений , доступных в Postgresql (и в нескольких других базах данных): CASE, COALESCE, NULLIF, GREATEST, LEAST. Первый - самый общий.

...