2010-05-26 13 views
10

Estoy usando una base de datos PostgreSQL, y en una tabla que representa algunas mediciones, tengo dos columnas: medición, e interpolada. En el primero tengo la observación (medida), y en el segundo el valor interpolado dependiendo de los valores cercanos. Cada registro con un valor original también tiene un valor interpolado. Sin embargo, hay muchos registros sin observaciones "originales" (NULL), por lo tanto, los valores se interpolan y almacenan en la segunda columna. Así que, básicamente, sólo hay dos casos en la base de datos:SQL Seleccione entre dos campos dependiendo del valor de un campo

Value Value 
NULL Value 

Por supuesto, es preferible utilizar el valor de la primera columna, si está disponible, de ahí que necesito para construir una consulta para seleccionar los datos de la primera columna y, si no está disponible (NULO), la base de datos devuelve el valor de la segunda columna para el registro en cuestión. No tengo idea de cómo construir la consulta SQL.

Por favor ayuda. Gracias.

Respuesta

27

Puede utilizar Coalesce:

La función COALESCE devuelve el primero de sus argumentos que no es nulo. Null se devuelve solo si todos los argumentos son nulos.

Select Coalesce(first_value, second_value) 
From your_table 

Esto volvería first_value si no es NULL, second_value lo contrario.

+0

¿y si quieres un tercer valor si el primer valor es nulo? – Joe

+1

¿Te refieres a 'COALESCE (first_value, second_value, third_value)'? Esto devolvería 'third_value' si tanto el primer como el segundo valor son' NULL'. –

+0

gracias, pero quiero el tercer valor solo si el primer valor es nulo. Me di cuenta de que quería obtener lo que quería. Hice una UNIÓN de 2 selecciones. Primero seleccione todos los registros donde firstvalue no sea nulo, el segundo seleccione donde el primer valor sea nulo y haga esto v.Name como FirstName, CONVERT (varchar (10), h.ID, 108) como LastName, – Joe

8

Peter lo clavó. Pero para completar (el título de su pregunta es más general que su problema en particular), aquí van los documentos para los conditional expressions disponibles en Postgresql (y en varias otras bases de datos): CASE, COALESCE, NULLIF, GREATEST, LEAST. El primero es el más general.

Cuestiones relacionadas