Accessを使って、複数のテーブルに跨ったデータを取得する時には、テーブルを繋げる「Join」を使うと思います。
せっかく、テーブルを繋げてデータを取得て計算できたと思ったら、該当しないデータがNullとなってしまって、困ったことありませんか?
Nullの場合、さらに集計関数を使って計算をすると、計算の対象外となってしまう事もあります。
そこで、IIF関数を使ってNullを0に変換して表示する方法をご紹介します。
説明用にTableAとTableBを準備しました。
TableAは何らかの商品金額一覧を想定しています。
TableBはその商品が紐づく場所の情報を表しています。
そこで、それぞれの場所毎の合計金額を求めたい。
つまり、この様な一覧を作りたいと思うのですが、単純にテーブルを繋げただけの場合は、以下の様に該当データが無い部分にNullが表示されてしまい、うまく表示されません。
この時のクエリーは以下になります。
SELECT TableB.Code, TableB.Place, SUM(TableA.Price) AS 合計金額 FROM TableA RIGHT JOIN TableB ON TableA.Category = TableB.Code GROUP BY TableB.Code, TableB.Place ORDER BY TableB.Code;
そこで、以下の2行目の様にIIF関数を使うと、
SELECT TableB.Code, TableB.Place, IIF(SUM(TableA.Price) IS NULL, 0, SUM(TableA.Price)) AS 合計金額 FROM TableA RIGHT JOIN TableB ON TableA.Category = TableB.Code GROUP BY TableB.Code, TableB.Place ORDER BY TableB.Code;
このように表示されます。
IIF関数はExcelのIF関数と同じ動きをすると覚えると、とても理解しやすいと思います。
こちらのサンプルもアップロードしてみました。
興味がありましたら、ダウンロードしてみてください。