• 締切済み

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

みんなの回答

  • qbr2
  • ベストアンサー率50% (62/123)
回答No.3

SELECT S1.社員CD,S1.社員名,COUNT(S2.社員CD) FROM 社員マスター S1 INNER JOIN 社員マスター S2 ON S1.氏名=S2.氏名 GROUP BY S1.社員CD,S1.社員名 で、どうでしょうか?

masa123456
質問者

お礼

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つのレコードしか返せません」 となってしまいます。 その後いろいろ試してみたのですが「構文エラー」になって実行すらできません。 やはり無理なのでしょうか? よろしくお願いします。

全文を見る
すると、全ての回答が全文表示されます。
  • 30246kiku
  • ベストアンサー率73% (370/504)
回答No.2

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

masa123456
質問者

お礼

30246kikuさん ありがとうございます。 早速以下のとおりやってみたのですが カウント:(select 社員名,count(*) as カウント from 社員マスター group by 社員名 ) as T1 on 社員マスター.社員名 = T1.社員名;) 「指定した式の構文が不正です」 「たとえば演算子がない時にオペランドを指定しています」 となります。 申し訳ないのですがACCESSでのSQLもよく解っていません。 ホストコンピュータ系では多少使っていたのですが・・・

全文を見る
すると、全ての回答が全文表示されます。
noname#96417
noname#96417
回答No.1

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

masa123456
質問者

お礼

q09さん いつもありがとうございます。 要件としてはやはり単なる重複チェックを超えたものと思います。 「重複クエリウィザード」を使っても質問に書いたと同様に重複データを抽出できることはわかったのですが、 この抽出結果から、元のテーブルに「要注意マーク」をつけて、「ダブり入力ではないか?本当に同姓同名の人ができたのか?」 を再度チェックしてもらうということになります。 これを1つのファイルでやること自体がやはり無理な考え方なのでしょうか? だんだんそんな気がしてきました。 別ファイルを作ってそれと重複チェックをする。 同姓同名の発生となればレコードを挿入し、直ちにそのレコードを別ファイルにも挿入して次のチェックに備える。 ということになるんでしょうか? それを一発でやれたらとおもったのですが・・・

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • ACCESSのクエリ、SQLに変数を使うのに??

    いつもお世話になっております。 ACCESS初心者です。行き詰ったため質問いたします。 どうか、ご教授お願いします。 アクセスのInsertクエリ実行時に変数を持たせたいです。 VBAコードにて、配列で格納している社員IDを1件ずつループして SyainCDにいれます。そこでSyainCDに値が入るたび、 SyainCDをWhere条件として、InsertSQLを実行したいです。 ■CODE■ SyainCD = SyainId(i) ※コード上ではSyainCDにきちんと値が 入ってきていることは確認済です。 また、SagyoYMD()というユーザ関数を用いて 作業日を取得する関数は正常に取得できます。 関数ではなく、コードの中の変数をSQLに組み込むことは 不可能なのでしょうか?? 実行するとエラーではなく、ダイアログでSyainCD を入力要求 が表示されてしまいます。。。。 ■実行クエリ INSERT INTO wrk_マスタテーブル SELECT * FROM [SELECT qry_ユニオンリンクテーブル.社員CD, qry_ユニオンリンクテーブル.作業日, Q_部署テーブル.部署名 FROM (Q_部署テーブル INNER JOIN ユニオンリンクテーブル ON Q_部署テーブル.社員CD = qry_ユニオンリンクテーブル.社員CD) ]. AS マスタテーブル WHERE マスタテーブル.社員CD = SyainCD AND マスタテーブル.作業日 = SagyoYMD(); よろしくお願いします。

  • アクセスクエリ メモ型だとエラーになる

    アクセスのテーブル1(主キーなし)に *********************************************************** フィールド1(メモ型) あああ いいい ううう いいい *********************************************************** と言うデータがあるのですが 「あああ」「ううう」は1個で「いいい」は2つあります。 これを、クエリ1で *********************************************************** SELECT テーブル1.フィールド1, Count(テーブル1.フィールド1) AS フィールド1のカウント FROM テーブル1 GROUP BY テーブル1.フィールド1; *********************************************************** と作り、 新しいクエリで *********************************************************** SELECT テーブル1.フィールド1, クエリ1.フィールド1のカウント FROM テーブル1 INNER JOIN クエリ1 ON テーブル1.フィールド1 = クエリ1.フィールド1; *********************************************************** としたいのですが、 メモ型ではダメなのでしょうか? メモ型でフィールドを宣言しつつ、 このようなクエリを作るにはどうすればいいですか? テキスト型にすると問題なくいけます。

  • Access97のクエリーでのDISTINCTROW について

    Access97のクエリーでのDISTINCTROWの解読の仕方がわからず困っています。 SELECT DISTINCTROW テーブル1.番号, テーブル1.D名, テーブル1.E名, FROM テーブル1 WHERE (((テーブル1.番号) In (SELECT [番号] FROM [テーブル1] As Tmp GROUP BY [番号] HAVING Count(*)>1 ))) ORDER BY テーブル1.番号; このSQL文はどういう条件のデータを選択する意味なのでしょうか。 教えてください。

  • Access 2000、ユニオンクエリーがどうしても出来ない!

    初歩の質問ですが、ユニオンクエリーが出来ません。 やりたい事は非常に単純です↓↓ 1:テーブル1、テーブル2、テーブル3があります。 2:各テーブルのデータ内容は様々ですが、共通項目として「品番」を持っています。但しテーブル1は「製品名」、テーブル2と3は「品番」という項目名になっています。 3:各テーブル内に、品番が幾つ入っているか、集計クエリでカウントします。項目名が違うので以下のように処理しました。  <テーブル1の場合>    フィールド|品番のカウント: 製品名|タイトル: "テーブル1"    テーブル |テーブル1     集  計 |カウント  <テーブル2(或いは3)の場合>    フィールド|品番のカウント: 品番|タイトル: "テーブル2"    テーブル |テーブル2     集  計 |カウント 4:3の集計クエリーを繋ぎ、テーブル1~3の品番件数を一気に表示させたい  <ユニオンクエリの内容>     SELECT *     from Q0_カウント_テーブル1     UNION select *     from Q0_カウント_テーブル2     UNION select *     from Q0_カウント_テーブル3; 5:私の予想としてはこんな風↓↓出てくるはずだったのですが・・・     品番のカウント| タイトル     ------------------------------        30   | テーブル1        20   | テーブル2        23   | テーブル3  6:結果は「From句の間違いです」と出ます。他の質問も見ましたが、自分のSQLのどこを直せば良いのかわかりません・・・教えてください!

  • アクセス 今日の日付の個数のみクエリで表示したい

    テーブル1に「日のみ」フィールドを作成し 日のみ 2009/06/28 2009/06/28 2009/06/27 としました。 新規に選択クエリを作成し SELECT Count(テーブル1.日のみ) AS 日のみのカウント FROM テーブル1 HAVING (((Count(テーブル1.日のみ)) Between Date() And Date()+1)); としたのですが、 0が返ってきます。 SELECT Count(テーブル1.日のみ) AS 日のみのカウント FROM テーブル1; だと3が返ってきます。 どうすれば今日の日付のみをカウントできるのでしょう? ご教授よろしくお願い致します。

  • アクセス:クロス集計の抽出条件-2

    質問No.9247365 で類似した質問をしました。 添付のようなテーブルがあり下記のSQLを実行するとクエリ1になるのですが、カウントに抽出条件を入れてクエリ3のように合計件数が1のものは集計しないようしたいと思います。 下記SQLをどのように直したらよいでしょうか。一つのクエリで行う方法を教えて下さい。 TRANSFORM Count([テーブル1].[くだもの]) AS くだもののカウント SELECT [テーブル1].[くだもの], Count([テーブル1].個数) AS 合計 FROM テーブル1 GROUP BY [テーブル1].[くだもの] PIVOT [テーブル1].月;

  • Oracleのシングルクォーテーション

    いつもお世話になっております。 Oracleの「'(シングルクォーテーション)」の使い方について教えてください。 テーブルAのフィールド001には2桁の数値が文字列型として格納されています。 (1)SELECT COUNT(*) FROM テーブルA WHERE フィールド001 = '09' でデータの抽出をしているのですが、データがあるにも係らず、「0」となってしまいます。 (2)SELECT COUNT(*) FROM テーブルA WHERE フィールド001 = 09 では、「09」だけでなく「9」までカウントしてしまいます。 データの中には「09」「9」が混在していて、これらを別々にカウントしたいのですが、(1)では結果を得ることが出来ません。シングルクォーテーションの使い方に間違いがあるのでしょうか? 別々にカウントする方法があればご教授いただけないでしょうか? よろしくお願いします。

  • ACCESS更新クエリー活用方法について

    ACCESSでテーブルから抽出したクエリーで表示された特定の列だけに 1という数字をふりたいのですが、 update 抽出元のテーブル set 任意のセル = 1 where クエリー名 上記方法、更新クエリーで上記SQLを設定しても、クエリー実行時に、 バラメータを要求され、結果 全てのテーブル列に1がふられます。 式が違うのでしょうか。あくまでもクエリーで抽出されたものだけに 1をふりたいのですが。 デザインビューにしてSQLビューに切るかえる。 select 列 from 抽出元のテーブル where 抽出の条件 ; みたいなデータです。 where の前を書き換えます。 select 列 from 抽出元のテーブル の部分を update 抽出元のテーブル set 任意のセル = 1 としてください。 最終的には以下のイメージ update 抽出元のテーブル set 任意のセル = 1 where 抽出の条件 ;

  • ACCESSの更新クエリー活用方法の件(続き)

    ID 商品 価格 備考  フラグ という列をもつテーブルがあるとします。 こちらは、 テーブル名:商品名 としています。 これにたいして選択クエリーを使って、特定の商品だけを クエリーで引っ張ってきています。 クエリー名:抽出 このクエリー名:抽出で引っ張ってきたデータにあるフラグの列に「更新クエリー」で 1の数値を入れたいのですが、 それは更新クエリーでどのようにSQLをせっていするかたちになりますか。 更新クエリー名:更新 update 抽出元のテーブル set 任意のセル = 1 where 抽出の条件 update 商品名 set フラグ = 1 where 抽出 ; 上記方法、更新クエリーで上記SQLを設定しても、クエリー実行時に、 バラメータを要求され、結果 全てのテーブル列に1がふられます。 式が違うのでしょうか。あくまでもクエリーで抽出されたものだけに 1をふりたいのですが。 http://okwave.jp/qa/q7278856.html > http://okwave.jp/qa/q7277790.html の#1・#2です。 #1に「選択クエリは作れますか?」と書いたのをほったらかしにして、続きの質問とは・・・。 具体的なテーブル名・列名を提示してないので、イメージで書いてあるんだから 回答を丸写ししちゃダメでしょ。 > #1です。ごめんなさい。もっとシンプルに考えれば良いです。 デザインビューにしてSQLビューに切るかえる。 select 列 from 抽出元のテーブル where 抽出の条件 ; みたいなデータです。 where の前を書き換えます。 select 列 from 抽出元のテーブル の部分を update 抽出元のテーブル set 任意のセル = 1 としてください。

  • select max~の値の取得方法

    select Max(x) from table where y=1 基本的なことかもしれませんが、上のようなクエリを実行したときの値の取得の仕方を教えてください。 単純に query="select Max(x) from table where y=1" a=Execute query としたら「ステートメントの末尾が不正です。」というエラーが出ました。

中イキの仕方
このQ&Aのポイント
  • 結婚して3年、Hでいったことがない私。夫はしたくない側でありながら、たまに嫌々やってくれている。でも私は不満を感じてしまい、喧嘩になってしまった。Hはしたいし、中イキも経験してみたい。しかし、旦那は下手ではないけど中イキには抵抗があるようだ。玩具も試してみたけど、なかなかいけない。こんな私でも中イキする方法を教えてほしいです。
  • 結婚して3年、Hでいったことがない私。夫はしたくない側の人間で、たまに嫌々やっているのかもしれない。でも私は不満を感じ、喧嘩になってしまった。Hはしたいし、中イキも経験してみたい。旦那は下手ではないけど、中イキには抵抗があるようだ。玩具も試してみたけど、なかなかいけない。こんな私でも中イキする方法を教えてほしいです。
  • 結婚して3年、Hでいったことがない私。夫はしたくない側の人間で、たまに嫌々やっているのかなと思うこともある。でも私は感謝しながらも不満を感じてしまい、喧嘩になってしまった。Hはしたいし、中イキも経験してみたい。旦那は下手ではないけど、中イキには抵抗があるようだ。玩具も試してみたけど、なかなかいけない。こんな私でも中イキする方法を教えてほしいです。
回答を見る

専門家に質問してみよう