テーブル構造を下記のように仮定します。【 】は主キー
名簿テーブル(【ID】,名前)
給与テーブル(【ID,支給月】,給与)
>太郎以外の未入力の人には0円と表示したいのですが。
LEFT JOIN(RIGHT JOIN)を使えば可能だと思います。
----------------
SELECT 名簿テーブル.名前, Nz(給与テーブル.給与,0) as 給与
FROM 名簿テーブル LEFT JOIN 給与テーブル
ON 名簿テーブル.ID = 給与テーブル.ID;
----------------
しかし、実際は4月以外のデータも入るでしょうから、
月で絞り込む必要があると思います。
しかし、下記のようにするのはよくある間違いです。
----------------
SELECT 名簿テーブル.名前, Nz(給与テーブル.給与,0) as 給与
FROM 名簿テーブル LEFT JOIN 給与テーブル
ON 名簿テーブル.ID = 給与テーブル.ID
WHERE 給与テーブル.支給月 = 4;
----------------
ちょっと工夫が要ります。
クエリを2段にするのが簡単だと思います。
-------Q1-------
SELECT *
FROM 給与テーブル
WHERE 給与テーブル.支給月=4;
----------------
-------Q2-------
SELECT 名簿テーブル.名前, Nz(Q1.給与,0) AS 給与
FROM 名簿テーブル LEFT JOIN Q1
ON 名簿テーブル.ID = Q1.ID;
----------------
更に、パラメータを使うと、開く時に月を指定できます。
-------Q1-------
PARAMETERS 月を入力 Value;
SELECT *
FROM 給与テーブル
WHERE 給与テーブル.支給月=月を入力;
----------------
-------Q2-------
SELECT 名簿テーブル.名前, Nz(Q1.給与,0) AS 給与
FROM 名簿テーブル LEFT JOIN Q1
ON 名簿テーブル.ID = Q1.ID;
----------------
補足:SQL文の使い方
・クエリ→新規作成→デザインビュー
・テーブルは追加しない
・表示→SQLビュー
・SQL文をコピー&ペースト
お礼
お礼が遅くなってすいません。 SQLはまったくの初心者だったので本を買って少し勉強してみました。 まだまだ使いこなせないでしょうけど、こういうこともできるのかと大変参考になりました。 ありがとうございました。