こんにちは。 今回は、読者からの質問への回答です。 *今後は、別のメルマガでVBA関係やっていきます。 えっ、始めから期待して無いって?そんなこと言わないで、、、 まず、質問内容(対応が遅かったから、解決していると思うが、、) In message "Fwd: 質問(SELECT文について)", >SELECT文で重複行を表示しないのは >DISTINCTで できなすが >逆に重複している行だけをSQLだけで >表示できますか? >全部のデータを読んでコントロールブレイクを >取りながら重複行を検索するしかないんですか? '---------------------------------------------- SQLのCount関数を使用して、やってみたいと思います。 まず、下記のようなデータがあるとします テーブル名 : DATA ID CODE 1 A 2 A 3 A 4 BB 5 CCC 6 CCC 7 DDDD 8 DDDD 9 EEEEE 10 FFFFFF 11 FFFFFF 12 FFFFFF 13 GGGGGG 14 HHHHHHH A,CCC,DDDD,FFFFFFを抜き出して、処理したいんだけど、、、 さて、どうしましょう? グループ分けをして、レコード数を数えるSQLを 普通にクエリーのデザイン画面で作ります。 *ポイントは、表示メニューの集計をチェックしておくことです。 次に、SQLビューに切替え、作成したSQLをみます。 SELECT DATA.CODE, Count(DATA.CODE) AS GCNT >FROM DATA GROUP BY DATA.CODE; なんて、SQLを自動的に書いてくれます。 これを元に、下記のモジュールで確認しました。 Sub test01() Dim DB As Database Dim TB As Recordset Dim nCNT As Integer Dim strSQL As String 'カレントデータベースを参照 Set DB = CurrentDb 'SQL文作成、、レコードセットを開く strSQL = "SELECT DATA.CODE, Count(DATA.CODE) AS GCNT FROM DATA GROUP BY DATA.CODE;" Set TB = DB.OpenRecordset(strSQL) If TB.RecordCount = 0 Then MsgBox "データ無し" Else TB.MoveFirst 'データが無くなるまで While TB.EOF = False MsgBox TB![code] & " = " & TB![GCNT] & "件" TB.MoveNext Wend End If TB.Close DB.Close End Sub おいおい、、、これだと、1件のデータも表示するぞ? できてないじゃん、、、 まぁまぁ、ハヤマラナイデね。。。 アレンジでif TB![GCNT] <> 1 then みたいにするとか、 入れてくださいよ。。。 なんて書くと、クレームきますね。 クエリーのデザイン画面で、Not 1 を入れると、下記のSQL文が自動作成されます。 SELECT DATA.CODE, Count(DATA.CODE) AS GCNT >FROM DATA GROUP BY DATA.CODE HAVING ((Not (Count(DATA.CODE))=1)); このSQL文をレコードセットのソースにすれば、 1件以上重複のあるデータ(レコード数が1以上)を取り出せます。 *Count(DATA.CODE)>1 のほうがいいかな? GROUP BYは知ってたけど、 HAVINGは知らなかった、、、 いつのまにか、SQLを書けないプログラマーになってた、、、 と自分でも気がついたとこで、 今回のまとめ・ポイントは、 SQLでCount関数を使用するのと、 HAVING 句を使用して、グループ化されたデータをしぼる?です。 ヘルプを見ながら、SQLの奥深さを味わってください。 *無知なKen3への辛口ご意見・助言募集です。 辛口ご意見の例 ・なっちゃいないなぁ、、、Where句とHAVING句の違いを書かなきゃ ・集合関数Sum(項目)やMax(項目)なども合わせて説明したら? ・オマエ三流たからコントロールブレークって意味知らないだろ? などなど、、 では。。。また。。。 頼りにならないなぁもう、、三流プログラマーのKen3でした。。
質問や要望など連絡方法でお互い確認が取りやすく、便利なのが掲示板なのですが、私の対応のまずさから不定期で荒れてしまい、掲示板は現在封鎖中です。(反省しなきゃ)
感想や質問・要望・苦情など 三流君へメッセージを送る。 時間的余裕のある要望・質問・苦情の場合は、下記のフォームからメッセージを送ることができます。 |
←パソコンの技術系の書籍を探しているなら コンピュータ関連の出版社33社(アスキー、インプレス等)が共同運営するコンピュータの本・専門店 ※種類が豊富で探し易い※在庫ありが48時間以内発送 |