Access SQL

AccessのIIF関数を使って、Nullを0にする

Accessを使って、複数のテーブルに跨ったデータを取得する時には、テーブルを繋げる「Join」を使うと思います。
せっかく、テーブルを繋げてデータを取得て計算できたと思ったら、該当しないデータがNullとなってしまって、困ったことありませんか?
Nullの場合、さらに集計関数を使って計算をすると、計算の対象外となってしまう事もあります。
そこで、IIF関数を使ってNullを0に変換して表示する方法をご紹介します。

説明用にTableAとTableBを準備しました。
TableAは何らかの商品金額一覧を想定しています。
TableA

TableBはその商品が紐づく場所の情報を表しています。
TableB

そこで、それぞれの場所毎の合計金額を求めたい。
Good Query

つまり、この様な一覧を作りたいと思うのですが、単純にテーブルを繋げただけの場合は、以下の様に該当データが無い部分にNullが表示されてしまい、うまく表示されません。
Bad Query

この時のクエリーは以下になります。

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;

このように表示されます。
Good Query

IIF関数はExcelのIF関数と同じ動きをすると覚えると、とても理解しやすいと思います。

こちらのサンプルもアップロードしてみました。
興味がありましたら、ダウンロードしてみてください。

参考URL

IIf関数(Microsoft社ホームページ)

-Access, SQL
-,