2008-09-26 10 views
8

J'ai une requête SQL (MS Access) et j'ai besoin d'ajouter deux colonnes, dont l'une peut être nulle. Par exemple:SQL Null défini sur zéro pour ajouter

SELECT Column1, Column2, Column3+Column4 AS [Added Values] 
FROM Table 

où Colonne3 ou Colonne4 peut être nul. Dans ce cas, je veux que nul soit considéré comme nul (donc 4 + null = 4, null + null = 0).

Des suggestions sur la façon d'accomplir cela?

Répondre

13

Depuis ISNULL dans Access est une fonction booléenne (un paramètre), l'utiliser comme ceci:

SELECT Column1, Column2, IIF(ISNULL(Column3),0,Column3) + IIF(ISNULL(Column4),0,Column4) AS [Added Values] 
FROM Table 
+0

Dans l'accès, cependant, ISNULL est juste une fonction booléenne, et non conditionnelle (donc il ne prend qu'un seul paramètre, et renvoie s'il est nul). Existe-t-il un moyen de faire des choses conditionnelles dans Access? (http://www.techonthenet.com/access/functions/advanced/isnull.php) – Smashery

+0

Voir ma réponse mise à jour - non testé J'ai peur. –

+0

Ouais, je viens de trouver la déclaration IIF, et ça marche. Merci beaucoup! – Smashery

3

Utilisez le ISNULL commande de remplacement:

SELECT Column1, Column2, ISNULL(Column3, 0) + ISNULL(Column4, 0) AS [Added Values]FROM Table 
+2

Cela ne fonctionne pas dans Access/Jet/ACE. L'équivalent de IsNull() est Nz(), mais il n'est pas disponible dans tous les contextes en dehors d'Access lui-même, donc vous devez utiliser la logique IIf() avec la fonction Access/Jet/ACE IsNull() false selon que l'expression transmise est Null ou non), qui est toujours disponible. –

0

Utilisez COALESCE.

SELECT 
    Column1, 
    Column2, 
    COALESCE(Column3, 0) + COALESCE(Column4, 0) AS [Added Values] 
FROM Table 
+1

Pas de COALESCE dans Access: il y a NZ() mais c'est légèrement différent. –

3

encore plus propre serait la fonction nz

nz (column3, 0) 
+0

Notez que si vous utilisez Nz(), la commande Nz n'est pas présente directement dans le langage vba. Normalement, cela n'a aucun impact, mais si vous utilisez une requête liée dans Excel depuis Access, Nz ne fonctionnera pas. Mais vous pouvez toujours utiliser la construction iif (isnull() ...). – Knox

+0

@Knox: vous avez raison sur l'effet, mais faux sur la cause je pense: NZ est VBA et pas SQL, c'est pourquoi il échoue lorsqu'il est appelé à partir d'applications externes. J'ai aussi vu que c'est plus lent que la construction IIF pour la même raison: appeler VBA. –

+0

Nous sommes d'accord que Nz n'est pas SQL.Cependant, comme Excel exécute VBA complet et peut communiquer avec des bases de données avec ou sans Access, et qu'excel ne peut en aucun cas utiliser Nz(), nous pouvons conclure que Nz est une fonction spécifique à Access. – Knox

0

La fonction Nz() à partir de VBA peut être utilisé dans votre requête MS Access.

Cette fonction substitue une valeur NULL pour la valeur du paramètre donné.

SELECT Column1, Column2, Nz(Column3, 0) + Nz(Column4, 0) AS [Added Values] 
FROM Table 
2

Selon Allen Browne, le meilleur moyen est d'utiliser IIF(Column3 is Null; 0; Column3) parce que les deux néo-zélandais et ISNULL sont des fonctions VBA et d'appeler des fonctions VBA ralentit les requêtes JET.

0

Dans votre définition de table, définissez la valeur par défaut pour Column3 et Column4 sur zéro. Par conséquent, lorsqu'un enregistrement est ajouté sans valeur dans ces colonnes, la valeur de la colonne sera zéro. Vous n'auriez donc jamais à vous soucier des valeurs nulles dans les requêtes.

Questions connexes