2017-12-31 50 views
1

私は数日間クエリの問題に苦しんでいて、答えを参照して、私がSQLで偉大ではないので、見つかったロジックを適用できないと思うかもしれません。私は[0100]と[Product]という2つのテーブルを持ち、各カテゴリの実際と予測の差異を計算する必要があります。私は分散列の作業を持っていたら、私は実際と予測列を削除しますアクセスサブクエリ

SELECT 
    Product.Description, 
    Sum([0100].Actual) AS Actual, 
    Sum([0100].Forecast) AS Forecast, 
    Sum(IIf([0100]![Forecast]=0, 
      IIf([0100]![Actual]=0, 
       0, 
       IIf([0100]![Actual]>0,9.99,-9.99) 
      ), 
      ([0100]![Actual]-[0100]![Forecast])/[0100]![Forecast] 
     ) 
    ) AS Variance 
FROM 
    0100 
    INNER JOIN Product ON [0100].Category = Product.ID 
GROUP BY 
    Product.Description; 

が、私は分散列を取得することができません:私は戻って、これによサブクエリの数を試してみましたが、それらを動作させることはできません正しく動作するようにするには、サブクエリが必要なためだと思います。それは式=IF(AND(B2=0,C2=0),0,IF(C2=0,IF(B2>0,9.99,-9.99),(B2-C2)/C2))

**Column A        B   C   Formula 
Account Group      Actual  Forecast  Variance** 
Admin & Management staff costs -8256.61 -8256.61   0% 
Bank interest      0    0   0% 
Care staff 4 weekly paid    268   268   0% 
Care staff travel -70 -70 0% 
Contracts - health & soc services -748317.97 -788317.97  -5% 
Donations & fundraising    -9665.69  -9465.69  2% 
Fundraising & promotion    4695.68  4695.68  0% 
Grants        -28687  -39687  -28% 

誰もが右の分散クエリを得ることにヘルプを提供することができ、それはそうと、次のスナップショットごとにExcelで働いて持っているどのproceed.Iするによう試みた多くの時間を有する、私は途方に暮れていますExcel式と同じ結果を返しますか?私は提供されたExcel結果を返すレコードを持つ製品テーブルと0100テーブルを持つサンプルデータベースを用意しており、リンクを張ったり提供したりできるかどうかがわかります。

多くのおかげで、

サイモン

+0

実際の結果と期待される結果とサンプルテーブルを質問に表示してください。質問(添付ファイルなし)には、回答を提供するために必要なすべての情報を含める必要があります。 –

+0

エラーメッセージが表示されたり、*と表示されているが、動作させることができない望ましくない結果が常に送信されます*は役に立ちません。 – Parfait

答えて

1

ExcelのAccessで同等

=IF(AND(B2=0,C2=0),0,IF(C2=0,IF(B2>0,9.99,-9.99),(B2-C2)/C2)) 

は次のとおりです。

IIf([0100]![Actual] = 0 And [0100]![Forecast] = 0, 
    0, 
    IIf([0100]![Forecast] = 0, 
     IIf([0100]![Actual] > 0, 9.99, -9.99), 
     ([0100]![Actual]-[0100]![Forecast])/[0100]![Forecast] 
    ) 
) 

値はNull(つまり、あなたが持っている場合は、空のフィールドをすることができた場合)Nz(x) = 0の代わりにのテスト。

IIf(Nz([0100]![Actual]) = 0 And Nz([0100]![Forecast]) = 0, 
    0, 
    IIf(Nz([0100]![Forecast]) = 0, 
     IIf(Nz([0100]![Actual]) > 0, 9.99, -9.99), 
     (Nz([0100]![Actual])-Nz([0100]![Forecast]))/Nz([0100]![Forecast]) 
    ) 
) 

IfExpressionまたはElseExpressionのいずれかを返しますが、それは常に両方式を評価IIf(condition, IfExpression, ElseExpression)機能。したがって、値が<> 0とテストされた場合でも、Nz()関数を適用する必要があります。Nz()はをEmptyに変換し、Emptyは型のデフォルト値です。数値型の場合は0、文字列の場合は空の文字列など