2010-05-26 245 views
10

我正在使用PostgreSQL数据库,并且在代表某些度量的表中,我有两列:测量值和插值值。在第一次我观察(测量),第二次插值取决于附近的值。每个具有原始值的记录都有一个插值。但是,有很多没有“原始”观察(NULL)的记录,因此这些值被内插并存储在第二列中。所以基本上只有两个病例在数据库:SQL根据一个字段的值在两个字段之间进行选择

Value Value 
NULL Value 

当然,最好是从第一列中使用的值,如果可用,因此我需要建立一个查询,以便从第一列选择数据,如果不可用(NULL),则数据库返回有问题记录的第二列中的值。我不知道如何构建SQL查询。

请帮忙。谢谢。

回答

27

您可以使用Coalesce

COALESCE函数返回第一个它的参数是不为空。仅当所有参数都为空时才返回空值。

Select Coalesce(first_value, second_value) 
From your_table 

这将返回first_value如果不是NULLsecond_value否则。

+0

如果你想要第三个值如果第一个值为空怎么办? – Joe 2016-11-18 15:31:20

+1

你的意思是像'COALESCE(first_value,second_value,third_value)'?如果第一个和第二个值都是NULL,这将返回'third_value'。 – 2016-11-18 15:32:43

+0

谢谢,但我想第三个值只有当第一个值为空。我想出了我想要的,我做了2次选择的联合。首先select获取firstvalue为非null的所有记录,第二个select的where第一个值为null,并将此v.Name作为FirstName,CONVERT(varchar(10),h.ID,108)作为LastName, – Joe 2016-11-19 11:58:06

8

彼得钉了它。但为了完整起见(您的问题的标题比您的特定问题更笼统),下面列出Postgresql(以及其他几个数据库)中可用的几个conditional expressions的文档:CASE, COALESCE, NULLIF, GREATEST, LEAST。第一个是最一般的。

相关问题