2010-05-26 6 views
10

J'utilise une base de données PostgreSQL et, dans un tableau représentant certaines mesures, j'ai deux colonnes: mesure, et interpolée. Dans le premier j'ai l'observation (mesure), et dans la seconde la valeur interpolée dépend des valeurs voisines. Chaque enregistrement avec une valeur d'origine a également une valeur interpolée. Cependant, il y a beaucoup d'enregistrements sans observations "originales" (NULL), donc les valeurs sont interpolées et stockées dans la deuxième colonne. Donc, fondamentalement, il y a seulement deux cas dans la base de données:SQL Sélection entre deux champs en fonction de la valeur d'un champ

Value Value 
NULL Value 

Bien sûr, il est préférable d'utiliser la valeur de la première colonne si elle est disponible, donc je dois construire une requête pour sélectionner les données de la première colonne et si elle n'est pas disponible (NULL), la base de données renvoie la valeur de la deuxième colonne pour l'enregistrement en question. Je n'ai aucune idée comment construire la requête SQL.

Aidez-nous s'il vous plaît. Merci.

Répondre

27

Vous pouvez utiliser Coalesce:

La fonction COALESCE renvoie le premier de ses arguments qui ne sont pas nuls. Null est renvoyé uniquement si tous les arguments sont NULL.

Select Coalesce(first_value, second_value) 
From your_table 

Cela retournerait first_value si ce ne NULL, second_value autrement.

+0

et si vous voulez une troisième valeur si la première valeur est nulle ?? – Joe

+1

Voulez-vous dire comme 'COALESCE (first_value, second_value, third_value)'? Cela renverrait 'third_value' si la première et la deuxième valeur sont' NULL'. –

+0

merci mais je ne veux la troisième valeur que si la première valeur est nulle. J'ai compris ce que je voulais, j'ai fait un choix de 2 sélections. First select a tous les enregistrements où firstvalue est non null le second select où first value est null et le fait v.Name comme FirstName, CONVERT (varchar (10), h.ID, 108) comme LastName, – Joe

8

Peter l'a cloué. Mais par souci d'exhaustivité (le titre de votre question est plus général que votre question particulière), voici les documents pour les conditional expressions disponibles dans Postgresql (et dans plusieurs autres bases de données): CASE, COALESCE, NULLIF, GREATEST, LEAST. Le premier est le plus général.

Questions connexes