2010-12-08 4 views
1

J'ai une requête où il faut mes ventes totales et soustrates par mes ventes annulées, mais s'il n'y a pas de ventes annulées, la valeur est nulle. puis lorsque lesql requête soustraction

donc en gros si mes canceledsales où NULL retourne une valeur NULL pour la colonne de soustraction au lieu des TotalSales

totalsales-canceledsales(null) = null 
1000-null=null 

je veux que ce soit comme ça

1000-null=1000 

Répondre

6

Le bon ANSI SQL serait (prenant en compte totalsales et canceledsales pourrait être tous les deux null):

coalesce(totalsales, 0) - coalesce(canceledsales, 0) 

Vous pouvez également voir l'utilisation de ISNULL sur SQL Server:

isnull(totalsales, 0) - isnull(canceledsales, 0) 
+0

donc mon expression réelle dans le constructeur de requête est SUM (APRICE) - isnull (SUM (CancelRevenue), 0) – MyHeadHurts

+0

Cela a été rejetant mon application toute la journée grâce – MyHeadHurts

+2

Non, ce serait somme (aprice) - somme (isnull (cancelrevenue, 0)) –

0

La question est que toute fonction contre NULL est NULL. Dans ce cas, NULL signifie inconnu.

Si vous soustrayez un nombre d'un nombre inconnu, le résultat est inconnu.

Si vous soustrayez un nombre inconnu d'un nombre connu, le résultat est inconnu.

Les deux nombres doivent être connus pour renvoyer une réponse connue. Dans ce cas, si l'un des opérandes est NULL, NULL est la bonne réponse.

Cependant, si vous préférez voir 0 que NULL, utilisez ISNULL():

totalsales - isnull(canceledsales, 0) 

Le livre SQL AntiPatterns a un chapitre expliquant mieux NULL.