2010-07-16 9 views
1

Apparemment, NUMBER + NULL renvoie NULL dans SQL. J'ai donc besoin d'ajouter 0 au lieu de NULL mais cela ne fonctionne pas, j'obtiens une erreur de syntaxe. Je regarde les docs et c'est ce qu'il dit de le faire, je ne suis pas sûr ...Problème de cas SQL simple - renvoyer 0 lorsque NULL

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 

Vous avez une erreur dans votre syntaxe SQL; consultez le manuel qui correspond à votre version du serveur MySQL pour la bonne syntaxe à utiliser près de

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

IFNULL (qté, 0) est également une option – Mojtaba

Répondre

8

Vous êtes vraiment proche.

Case qty When NULL Then 0 else qty END 

L'IS NULL est une convention où l'article. Vous pouvez également utiliser Coalesce:

Select Coalesce(qty, 0) 

Coalesce renvoie la première non-null de sa liste de paramètres. Donc, si qty est Null, vous obtenez 0, sinon vous obtenez qty.

+2

Peut-être que cela dépend dialecte, mais "cas qté quand nulle puis 0 end else qty" doesn Travaillez comme vous vous attendez apparemment à Postgres. La clause WHEN équivaut à dire "if null = null", ce qui donne un résultat nul, ce qui n'est pas vrai, donc vous obtenez la clause else, qui renverra null, ce qui va à l'encontre du but de la construction CASE. Cela fonctionne si vous dites "cas où qty est nul alors 0 sinon qty end". En tout cas, la COALESCE fonctionne effectivement et est, je pense, beaucoup plus claire et plus facile à lire. – Jay

5

Utilisez cette syntaxe pour remplacer les valeurs NULL avec 0s:

select COALESCE(qty,0)...