[三流君] −−> [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弾(稼げないだろコラ!!) 参加無料:予想が当たれば一攫千金?今月はプロ野球のセパ勝敗とホームラン数 http://www.ken3.org/etc/500yen/5050.html ← 100万を当たった人数で山分け 『チッ、大穴横浜の勝利に賭けてるのに当たらない(笑)』(横浜ファン:31歳) ------------------------------------------------------------------------  ↑※7/13日の日曜日、雨で三試合中止 And 松坂の1回ノックアウト、、   大波乱、当てた人居るのかなぁ・・・雨で中止、読めなかった・・・   参加料無料なので、試合によっては一攫千金を狙えますよ。   当たっていない私が言うと説得力無いけど、みなさんは実力で稼いでください。

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

今回は、 SQL Select文で DISTINCT キーワードを使ってみたサンプルでした。 SQLって奥が深いですね・・・ SQLの魔術師はムリでも、 SQLの手品師ぐらいにはなりたいですね。 えっ、Ken3は、SQLのペテン師だろって? なんて読者の声が聞こえてこないうちに、今回は退散です。 何かの参考となれば幸いです。 素朴な疑問やリクエスト、クレームなどがあったら、 掲示板 : http://www.ken3.org/cgi-bin/bbs/asp/wforum.cgi に気軽に書き込んでください。 ASP、VBScript勉強中の三流プログラマーのKen3でした。

フィードバック

ASP系の→[掲示板]←を覗く、質問を書き込む

評価・感想

No.070を読んだ満足度(評価)は?
5満足(参考になった)
4まぁまぁ(一部参考になった)
3普通(どちらとも言えない)
2なんかなぁ(期待と違った)
1不満(読んで損した気分)
作者に感想・質問を送る場合は下記に気軽に書いてください
あなたのお名前(ニックネーム) さん

作者からの返信は、 不用 E-mail で受信したい
*質問・感想はメルマガで紹介する場合があります

三流君の主なリンク先

[アクセスランキング] [サイトマップ] [リンク先・相互リンク先など]
ASPで遊ぶ、失敗する 掲示板 バックナンバー 登録と解除
三流プログラマー 業務の愚痴 掲示板 バックナンバー 登録と解除
VBAで楽しくプログラミング 掲示板 バックナンバー 登録と解除
コンビニのオモテとウラ話 掲示板 バックナンバー 登録と解除
www.ken3.org(サイト内)から Google を利用して、

Ken3の日記(weblog) -- [広告・副収入系] [プログラマー業務の愚痴] [VBA系の話題] [ASP系の話題] [コンビニ系ネタ] [その他]

その他 宣伝広告