2010-07-16 12 views
1

显然NUMBER + NULL在SQL中返回NULL。所以我需要它添加0而不是NULL,但这不起作用,我得到一个语法错误。我在看文档,这就是它所说的这样做,我不知道...简单的SQL案例问题 - 在NULL时返回0

SELECT sku, (qty + (SELECT(CASE qty WHEN IS NULL THEN 0 ELSE qty END) 
        FROM other WHERE sku = Sheet1.sku LIMIT 1)) as qty 
FROM Sheet1 WHERE sku != '' 
ORDER BY sku ASC 

您的SQL语法错误;检查与您的MySQL服务器版本相对应的手册,以找到正确的语法以便使用

'IS NULL THEN 0 ELSE qty END) FROM other WHERE sku = Sheet1.sk 
+0

IFNULL(数量,0)也是一种选择 – Mojtaba 2013-05-29 21:04:39

回答

8

您真的很接近。

Case qty When NULL Then 0 else qty END 

IS Null是Where Where公约。您也可以使用Coalesce:

Select Coalesce(qty, 0) 

Coalesce返回其参数列表的第一个非空值。所以如果qty为空,你得到0,否则你得到数量。

+2

也许这是方言而定,但“案件数量当空,则0,否则,数量到底”没有按你的工作方式显然是在Postgres期待的。 WHEN子句相当于说“if null = null”,它给出了null的结果,这不是真的,所以你得到了else子句,它将返回null,从而破坏了CASE构造的目的。它可以工作,如果你说“当数量为零的情况下,然后0数量结束”。无论如何,我认为,联盟确实有效,并且更加清晰易读。 – Jay 2010-07-16 15:39:54

5

使用此语法用0来取代空值:

select COALESCE(qty,0)...