2010-12-28 5 views
0

J'essaie de faire un calcul de base dans MS Access SQL.Utilisation de Switch dans MS Access SQL

J'ai une table appelée Weekly, avec des statistiques hebdomadaires pour chaque utilisateur, comprend les colonnes suivantes: User, Fail, Pass, Approve et Reject (et certaines valeurs et une date sans importance).

Lorsque j'effectue la requête suivante:

SELECT User, Switch(Approve>0,Pass/Approve, Approve = 0, Null) AS passed_approved_ratio, Switch(Reject>0,Fail/Reject, Reject= 0, Null) AS fail_reject_ratio 
FROM Weekly 

je reçois une valeur #ERROR dans plusieurs lignes résultantes.

Je l'ai essayé avec et sans la seconde condition + valeur dans le Switch funciton (Switch(Approve>0, Pass/Approve),

Fail, Pass, et de rejeter toutes Approve ont une valeur numérique non nulle dans le tableau hebdomadaire, alors pourquoi ne pas qu'ils résolvent à une valeur nulle lorsque Approuvez ou rejetez sont 0

+0

Les valeurs peuvent-elles être <0? Essayez Approuver <= 0 comme deuxième argument. – dwo

+0

Il n'y a pas de valeurs négatives dans la table. Dans tous les cas, une valeur négative doit entraîner Null car aucune condition n'est remplie (selon la définition de la fonction Switch) – Jono

Répondre

2

La solution:

Utilisez Iif, ainsi:

SELECT Iif([Approve]>0, Pass/Approve, Null) as pass_approved_ratio 
FROM Weekly 

Cela fonctionne très bien pour le moment. J'aimerais quand même comprendre pourquoi j'ai eu des erreurs avec Switch, cependant.

+0

Vous tentez de renvoyer une valeur de chaîne, mais pas de guillemets. Essayez quelque chose comme: id> 0, "Pass/Approve". Si Pass/Approve est supposé être une colonne, je me débarrasserais de /, et j'essaierais aussi [Pass/Approve]. Slash et des choses comme l'espace devraient être évités dans les noms de colonnes et en utilisant [] dans ces cas aidera beaucoup –

+0

Albert, je l'utilise comme un opérateur de division. Le but de cette expression est de vérifier que le diviseur est différent de zéro. – Jono

3

Dans l'aide Bureau il déclare:

commutateur évalue toutes les expressions, même si elle ne retourne que l'un d'eux. Pour cette raison, vous devriez surveiller les effets secondaires indésirables. Par exemple, si l'évaluation d'une expression entraîne une division par zéro, une erreur se produit.