プロが教えるわが家の防犯対策術!

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万名もいて同姓同名もかなりあり、できればテーブルのコピーを作成せずに、同一テーブル内で上記のことをしたいのですが、そうはいかないものでしょうか?

A 回答 (3件)

SELECT S1.社員CD,S1.社員名,COUNT(S2.社員CD) FROM 社員マスター S1


INNER JOIN 社員マスター S2 ON S1.氏名=S2.氏名
GROUP BY S1.社員CD,S1.社員名

で、どうでしょうか?
    • good
    • 0
この回答へのお礼

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つのレコードしか返せません」
となってしまいます。
その後いろいろ試してみたのですが「構文エラー」になって実行すらできません。

やはり無理なのでしょうか?
よろしくお願いします。

お礼日時:2009/06/08 22:54

SELECT 社員マスター.社員ID, 社員マスター.社員名, T1.カウント


FROM 社員マスター INNER JOIN
(SELECT 社員名, Count(*) AS カウント FROM 社員マスター GROUP BY 社員名) AS T1
ON 社員マスター.社員名 = T1.社員名;

としてみては。
    • good
    • 0
この回答へのお礼

30246kikuさん

ありがとうございます。
早速以下のとおりやってみたのですが
カウント:(select 社員名,count(*) as カウント from 社員マスター group by 社員名 ) as T1 on 社員マスター.社員名 = T1.社員名;)
「指定した式の構文が不正です」
「たとえば演算子がない時にオペランドを指定しています」
となります。

申し訳ないのですがACCESSでのSQLもよく解っていません。
ホストコンピュータ系では多少使っていたのですが・・・

お礼日時:2009/06/08 06:19

たんなる重複チェックなら「重複クエリ ウィザード」を使われたらどうでしょう。

(2007)
    • good
    • 0
この回答へのお礼

q09さん

いつもありがとうございます。

要件としてはやはり単なる重複チェックを超えたものと思います。
「重複クエリウィザード」を使っても質問に書いたと同様に重複データを抽出できることはわかったのですが、
この抽出結果から、元のテーブルに「要注意マーク」をつけて、「ダブり入力ではないか?本当に同姓同名の人ができたのか?」
を再度チェックしてもらうということになります。

これを1つのファイルでやること自体がやはり無理な考え方なのでしょうか?
だんだんそんな気がしてきました。

別ファイルを作ってそれと重複チェックをする。
同姓同名の発生となればレコードを挿入し、直ちにそのレコードを別ファイルにも挿入して次のチェックに備える。
ということになるんでしょうか?

それを一発でやれたらとおもったのですが・・・

お礼日時:2009/06/07 18:22

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!