- 締切済み
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
- ベストアンサー率50% (62/123)
SELECT S1.社員CD,S1.社員名,COUNT(S2.社員CD) FROM 社員マスター S1 INNER JOIN 社員マスター S2 ON S1.氏名=S2.氏名 GROUP BY S1.社員CD,S1.社員名 で、どうでしょうか?
- 30246kiku
- ベストアンサー率73% (370/504)
SELECT 社員マスター.社員ID, 社員マスター.社員名, T1.カウント FROM 社員マスター INNER JOIN (SELECT 社員名, Count(*) AS カウント FROM 社員マスター GROUP BY 社員名) AS T1 ON 社員マスター.社員名 = T1.社員名; としてみては。
お礼
30246kikuさん ありがとうございます。 早速以下のとおりやってみたのですが カウント:(select 社員名,count(*) as カウント from 社員マスター group by 社員名 ) as T1 on 社員マスター.社員名 = T1.社員名;) 「指定した式の構文が不正です」 「たとえば演算子がない時にオペランドを指定しています」 となります。 申し訳ないのですがACCESSでのSQLもよく解っていません。 ホストコンピュータ系では多少使っていたのですが・・・
たんなる重複チェックなら「重複クエリ ウィザード」を使われたらどうでしょう。(2007)
お礼
q09さん いつもありがとうございます。 要件としてはやはり単なる重複チェックを超えたものと思います。 「重複クエリウィザード」を使っても質問に書いたと同様に重複データを抽出できることはわかったのですが、 この抽出結果から、元のテーブルに「要注意マーク」をつけて、「ダブり入力ではないか?本当に同姓同名の人ができたのか?」 を再度チェックしてもらうということになります。 これを1つのファイルでやること自体がやはり無理な考え方なのでしょうか? だんだんそんな気がしてきました。 別ファイルを作ってそれと重複チェックをする。 同姓同名の発生となればレコードを挿入し、直ちにそのレコードを別ファイルにも挿入して次のチェックに備える。 ということになるんでしょうか? それを一発でやれたらとおもったのですが・・・
お礼
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つのレコードしか返せません」 となってしまいます。 その後いろいろ試してみたのですが「構文エラー」になって実行すらできません。 やはり無理なのでしょうか? よろしくお願いします。