2010-12-28 18 views
0

MS Access SQLで基本的な計算をしようとしています。MS Accessでスイッチを使用するSQL

私はユーザーごとに、毎週の統計とWeeklyと呼ばれるテーブルを有し、次の列を含む:UserFailPassApproveReject(およびいくつかの重要でないID及び日付の値)。

私は次のクエリを実行する場合:

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 

を、私はいくつかの結果の行の#ERROR値を取得します。

私は失敗、合格が承認、Switch(Approve>0, Pass/Approve)Switch funcitonに第二の条件+値とし、なし

を、それを試してみましたが、すべてを拒否しましたが週刊テーブル内のnull以外の数値を持っているので、なぜ彼らは、承認または拒否されたときにヌル値に解決されません0

+0

値は<0? 2番目の引数としてApprove <= 0を試してください。 – dwo

+0

テーブルに負の値はありません。いずれの場合も、条件が満たされていないため、負の値はNullになります(Switch関数の定義による) – Jono

答えて

2

ソリューション:?

使用Iif、これ:

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

これは今のところうまく動作します。私はまだSwitchでエラーが発生した理由を理解したいと思います。オフィスで

+0

文字列値を返しますが、文字列値は引用符で囲まれません。 id> 0、 "Pass/Approve"のようなものを試してみてください。合格/承認が列でなければならない場合は、/を取り除き、[合格/承認]を試みます。スラッシュとスペースのようなものは列名で避けるべきであり、そのような場合に[]を使用すると多くの助けになります –

+0

アルバート、私は除算演算子として使用しています。この式の目的は、除数がゼロでないことを検証することです。 – Jono

3

は、それが述べ助ける:

スイッチは、それが唯一のそれらのを返すにもかかわらず、表現のすべてを評価します。このため、望ましくない副作用がないか注意してください。たとえば、任意の式の評価でゼロ除算が行われると、エラーが発生します。