[三流君] −−> [ASPで遊ぶ、失敗する] −−> [バックナンバー一覧]
−−> No.070 SQL Select DISTINCT キーワードで重複結果の出力をハジク

SQL Select DISTINCT キーワードで重複結果の出力をハジク



本文(発行内容)


<SQL Select DISTINCT キーワードで重複結果の出力をハジク>

こんにちは、三流プログラマーのKen3です。 今回は、 SQL Select DISTINCT キーワードを使用して、 重複結果の出力を取り除いてみたいと思います。

/* * 1.今回のキッカケ */

隣のVBA系のメルマガで、 Access サブフォームで連結 重複を弾いてメインに表示 http://www.ken3.org/backno/backno_vba22.html#106 --- >親フォームが音楽のバンド名が記載されてます。 >サブフォームには、 >そのバンドのメンバーと出身県と楽器と年齢などが記載されています。 > >そこで、親フォームには、そのバンドのメンバーの出身県が出るテキスト >ボックスがあります。 > >例えば・・・バンド名(BOOWY)−−−−−−−−−−親フォーム >      メンバー(氷室、布袋、松井、高橋)−−サブフォーム >      出身県(群馬、群馬、群馬、福島)−−−サブフォーム > >●質問1 > >で、このサブフォームに記載されている、出身県を親のフォームの >任意に作成したテキストボックスの中に「群馬、福島」とだけ表示したいのです。 > >「群馬、群馬、群馬、福島」と表示するのは、ちょっと・・・。 >群馬がだぶっているので、群馬の表示は1つとしたいのです。 --- と、データが群馬、群馬、群馬、福島と4件あって、 結果を重複を除いて、群馬、福島と2件表示したい、 そんな処理を考えてました。

/* * 2.力技とSQLを使った方法 */

はじめは、VBAのプログラマーらしく、 ループを使ってレコード全てをチェックしてました。 ^^^^^^^^^^^^^^^^^^^^^^ 'T_メンバーテーブルから出身地をバンドIDがフォームの値と一緒 strSQL = "Select 出身地 From T_メンバー " _ & " Where バンドID = " & Me![バンドID] こんな感じで、SQL文を作成して、 'レコードセットを開く rs.Open strSQL, CurrentProject.Connection, _ adOpenKeyset, adLockOptimistic レコードセットを作り、 レコードの最後までループ、 'ループ処理 str出身地 = "" '空文字で初期化 While rs.EOF = False 'いつものEOFが偽の間 'バッファの中に同じ出身地があるか場所をチェックする n = InStr(str出身地, rs.Fields("出身地")) If n = 0 Then '出身地が見つからなかったら(重複してない時) '出身地と" "スペース1つを+する str出身地 = str出身地 & rs.Fields("出身地") & " " End If rs.MoveNext '次のレコードに移動しないと、とんでもないことに(笑) Wend ループの中で、同じ出身地のチェックを行い、データの重複を取り除いてました。 SQL文で、重複を取り除くって考えると、 頭に浮かんだのが、Group By を使用して、 グループ化のレコードセットを作成する方法でした。 No.38 SQL GROUP BY句 で グループ化する http://www.ken3.org/backno/backno_asp08.html#38 で、 ログデータからURLを表示するために Set rs = db.Execute("Select URL From log GROUP BY URL") と、SQL文を指定してます。 http://www.ken3.org/cgi-bin/test/test038-1.asp を実行すると、 No. URL 1 http://www.ken3.org 2 http://www.ken3.org/ 3 http://www.ken3.org/24h/ 4 http://www.ken3.org/24h/add24h.html ・  ・  ・ とグループ化されてURLが表示されます。 同様に、GROUP BY 出身地 と グループ化して重複を取り除いてもよかったのですが、 何かないかなぁと調べていると、 SQL Select文で、 んっ? DISTINCTキーワード? ~~~~~~~~ 騙されたと思って、 Select DISTINCT 〜で、SQL文作ってみた。 'T_メンバーテーブルから出身地をバンドIDがフォームの値と一緒 strSQL = "Select DISTINCT 出身地 From T_メンバー " _ & " Where バンドID = " & Me![バンドID] と、Selectの後にキーワードを+してみます。 おっ、動きましたよ(笑)、出身地の重複がないレコードセットが返って来ました。 GROUP BY で Countなどのグループ単位の集計関数使わない時は、 Select DISTINCT で 制御するのもアリかなぁと思いました。 cnt.mdb から訪問されたURLを Set rs = db.Execute("Select DISTINCT URL From log") と、SQL文を指定してテストで取り出してみます。 http://www.ken3.org/cgi-bin/test/test070-1.asp で、テスト実行できます。 気になる処理時間は あまり変わらないかなぁ。 ※処理事態が全てのデータを見に行くからね。

/* * 3.終わりの挨拶 </HTML> */

今回は、 SQL Select文で DISTINCT キーワードを使ってみたサンプルでした。 SQLって奥が深いですね・・・ SQLの魔術師はムリでも、 SQLの手品師ぐらいにはなりたいですね。 えっ、Ken3は、SQLのペテン師だろって? なんて読者の声が聞こえてこないうちに、今回は退散です。 何かの参考となれば幸いです。 ASP、VBScript勉強中の三流プログラマーのKen3でした。


ページフッター

ここまで、読んでいただきどうもです。目的の情報が見つかったか?少々心配しつつ、、、

三流君へ メッセージを送る

感想や質問・要望・苦情など 三流君へメッセージを送る。
返信例 XXXXさんへ
下記のフォームからメッセージを送ることができます。


あなたのお名前(ニックネーム):さん
返信は?:

アドレス:に返事をもらいたい
感想や質問↓:


(感想や質問・要望・苦情はHPで記事に載せることがあります。)

種類別のリンク や 広告など

[三流君(TOP ken3.org へ戻る)] / [ASPで遊ぶ、失敗する] / [ASP記事 バックナンバー目次]


Blogとリンク:[三流君のMemo別館]/ [ASP 三流君のソースコード置き場]/ [Ken3Video YouTubeで動画解説]
広告:

気になった ジャンル ↓を選択してください。

まぁ、基本はデータの受け取りかなぁ。
・[Form等を使用したデータのやり取り]・・・ASPと言っても、HTMLの入力フォームからデータを受け取ります。POSTやGETでやりとりを押さえますか。

次は、データの入出力 で ADOを使った(ADOで接続) と SQLの解説を少々
・[ADOでMdbファイルを使う]・・・MDBと接続して、簡単な追加・更新・削除を行った。
・[ADOでExcelと接続してみた]・・・.xlsと接続してSQLを使ってみた。
・[ADOでCSVと接続してみた]・・・.CSV テキストを読み出した。※更新・削除はできません

広告:



DBが使えるので、あまり使用しないけど、普通のテキストファイル処理
・[テキストファイル処理]・・・ファイルを開いて、書き込む。1行読み込みなどを軽く

VBScriptでFormat関数が無いなど、微妙にVBAと違うけど
[VBScript関数関係の説明]・・・少し、処理を書いてみた。
[その他処理サンプル]・・・あまり良いサンプル作れなかったけど。。。
何かの参考となれば幸いです。



[三流君(TOP ken3.org へ戻る)] / [ASPで遊ぶ、失敗する] / [ASP記事 バックナンバー目次]


広告: