- 締切済み
ACCESS での SELECT の 方法
ACCESS の初心者です。 同姓同名の社員のデータの重複チェックをしたいと思って以下のようなSELECT分を作りました。 <元データ> 社員CD 社員名 カウント 1 ああああ 2 ああああ 3 いいいい <クエリで「カウント」列に入れるSELECT文> (select count(*) from 社員マスター Where 社員名 = 社員名 ) これを実行すると <クエリ実行後データ> 社員CD 社員名 カウント 1 ああああ 3 2 ああああ 3 3 いいいい 3 となってしまいます そこで「社員マスタ」テーブルをコピーし(項目名はすべて「2」を付加する) (select count(*) from 社員マスター2 Where 社員名 = 社員名2 ) としたら、期待していたとおり <修正クエリ実行後データ> 社員CD 社員名 カウント 1 ああああ 2 2 ああああ 2 3 いいいい 1 となりました。 実際の社員は1万名もいて同姓同名もかなりあり、できればテーブルのコピーを作成せずに、同一テーブル内で上記のことをしたいのですが、そうはいかないものでしょうか?
- みんなの回答 (3)
- 専門家の回答
お礼
qbr2さん ありがとうございます。 「氏名」は「社員名」のことですよね。 それで、選択クエリを以下の通りに入れました。 式: (SELECT S1.社員CD,S1.社員名,COUNT(S2.社員CD) FROM 社員マスター S1 INNER JOIN 社員マスター S2 ON S1.社員名=S2.社員名 GROUP BY S1.社員CD,S1.社員名) (申し遅れましたがACCESS2002です) 実行すると、 「メイン クエリの FROM 句の予約語 EXISTS を使用しないフィールドを複数返すサブクエリを作成しました。 サブクエリの SELECT ステートメントを変更し、1 つのフィールドだけを指定してください。」 というエラーが出ます。 サブクエリでは1つのフィールドしか指定していないので、メインクエリの方を1つのフィールドだけにして 式: (SELECT COUNT(S2.社員CD) FROM 社員マスター S1 INNER JOIN 社員マスター S2 ON S1.社員名=S2.社員名 GROUP BY S1.社員CD,S1.社員名) として実行してみると今度は 「パラメーターの入力」として「S2.社員CD」の入力を要求してきます。OKで飛ばすと次には「S1.社員CD」 を聞いてきます。これもOKで進めると、「このサブクエリでは1つのレコードしか返せません」 となってしまいます。 その後いろいろ試してみたのですが「構文エラー」になって実行すらできません。 やはり無理なのでしょうか? よろしくお願いします。