• ベストアンサー

アクセス2003 

いつもお世話になっています。 アクセス2003で下記のことは出来るでしょうか? <名簿テーブル>の名前フィールドに太郎・二郎・三郎・・・と1000人を登録します。 <名簿テーブル>とリンクした<給与テーブル>で4月に太郎に1万円の給与を支払ったことを入力したとします。 このとき新たに4月の1000人全員の名前と給与支払額をまとめたデータを作成出来ますか? 太郎以外の未入力の人には0円と表示したいのですが。 宜しくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • venzou
  • ベストアンサー率71% (311/435)
回答No.1

テーブル構造を下記のように仮定します。【 】は主キー 名簿テーブル(【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文をコピー&ペースト

kobutoriman085
質問者

お礼

お礼が遅くなってすいません。 SQLはまったくの初心者だったので本を買って少し勉強してみました。 まだまだ使いこなせないでしょうけど、こういうこともできるのかと大変参考になりました。 ありがとうございました。

その他の回答 (1)

  • CHRONOS_0
  • ベストアンサー率54% (457/838)
回答No.2

新しいレコードを作るには追加クエリを使います 名簿テーブルから追加クエリを作成 給与フィールドには太郎のときだけ10,000が入るようにすればいいでしょう 給与:IIf(名前="太郎",10000,0)

関連するQ&A