在我的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)。
我们如何提供这个?
感谢。
答案 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)....