[三流君] −−>
[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系の→[掲示板]←を覗く、質問を書き込む
評価・感想
三流君の主なリンク先
[アクセスランキング]
[サイトマップ]
[リンク先・相互リンク先など]
Ken3の日記(weblog) --
[広告・副収入系]
[プログラマー業務の愚痴]
[VBA系の話題]
[ASP系の話題]
[コンビニ系ネタ]
[その他]
その他 宣伝広告