SQL命令默认值

时间:2014-08-14 09:45:08

标签: mysql sql default-value

在我的Ms Sql命令中,我希望获得C.HEIGHT的值的总和

 SELECT SUM(C.HEIGHT) 
 FROM CIHAZ AS C 
 INNER JOIN ILISKI AS I ON I.REL_CIHAZ=C.ID 
 WHERE I.REL_DOLAP=2

此值返回NULL但我想将默认值赋予sum(C.HEIGHT)。

我们如何提供这个?

感谢。

3 个答案:

答案 0 :(得分:2)

您可以使用COALESCE,但由于您要对所有结果进行汇总,因此您可能会收到NULL,因为没有行。在这种情况下,您需要将整个查询包装为子查询,以使COALESCE按照我们想要的方式行事:

SELECT COALESCE( 
(SELECT SUM(C.HEIGHT) 
 FROM CIHAZ AS C 
 INNER JOIN ILISKI AS I ON I.REL_CIHAZ=C.ID 
 WHERE I.REL_DOLAP=2),
0 /* <-- default */) as Result

答案 1 :(得分:1)

如果列值为NULL,请使用COALESCE提供默认值,如下所示:

SELECT COALESCE(SUM(C.HEIGHT), yourdefaultvalue)
FROM CIHAZ AS C 
INNER JOIN ILISKI AS I ON I.REL_CIHAZ=C.ID 
WHERE I.REL_DOLAP=2

COALESCE是ANSI标准函数,您可以按照上面MySQL,Oracle和SQL Server中显示的方式使用它。

答案 2 :(得分:1)

如shree.pat18所说,您可以将所有NULL内联替换为coalesce

虽然根据SQL标准,在聚合期间将忽略NULL值,除非根本没有匹配的行,如下所述:

http://dev.mysql.com/doc/refman/5.5/en/group-by-functions.html

  

如果没有匹配的行,则SUM()返回NULL。

这意味着你需要这样做:

select sum(coalesce(c.height, 0))....

(以防你或其他人想知道)。

因此Damien_The_Unbeliever会显示整个查询周围的COALESCE

select coalesce(<query goes here>, 0)....