2010-07-16 66 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)...