プロが教えるわが家の防犯対策術!

キーワードを1つにまとめたいです

こんにちは。下記のようなIDに対し、複数のキーワードが登録されています。

TABLE1
フィールド、ID、KW

ID,KW
001,ice
001,cold
001,tastegood
002,book
002,google
003,analytics
003,excite
003,yahoo
003,sql

といったようにデータが登録されています。
これだと見にくいのでクエリで下記のように整形したいと思います。

001 ice cold tastegood
002 book google
003 analytics excite yahoo sql

半角スペースで区切りたいと思います。MYSQL5.1かMS ACCESS2003で
やれればと思っています。よろしくお願い致します。

A 回答 (2件)

MySQLであれば、独自機能のGROUP_CONCAT関数で実装できると思います。



参考URL:http://dev.mysql.com/doc/refman/5.1/ja/group-by- …
    • good
    • 0
この回答へのお礼

うわ!!この関数凄いです!!知りませんでした!ご回答ありがとうございます!!

お礼日時:2011/04/20 09:18

以下、Accessでの方法です。



クエリで表示するならば、

http://www.f3.dion.ne.jp/~element/msaccess/AcTip …




テーブルに直接取り込むならば、

http://oshiete1.watch.impress.co.jp/qa6628827.html

の書き直しで、
TABLE1と同じ構造のTABLE2を設定し、
TABLE2: ID KW

以下のコードを標準モジュールに保存し、
ボタンクリックで呼び出すか、あるいは
ボタンクリックの中にプロシージャの
中身をコピーして実行してもいいです。

なお、DAOを使っているので、コード表のツールから
参照設定を選択して、
Microsoft DAO xx Object Library
にチェックを入れて、OKとします。xxは3.6のような数字です。


Sub test()
Dim db As Database
Dim rs1 As Recordset
Dim rs2 As Recordset
Dim rs3 As Recordset
Dim strSQL As String
Dim myStr1 As String
Dim myStr2 As String

strSQL = "SELECT TABLE1.ID FROM TABLE1 GROUP BY TABLE1.ID;"
Set db = CurrentDb
Set rs1 = db.OpenRecordset("TABLE1")
Set rs2 = db.OpenRecordset("TABLE2", dbOpenDynaset)
Set rs3 = db.OpenRecordset(strSQL)

If rs3.RecordCount > 0 Then
rs3.MoveFirst
Do Until rs3.EOF
If rs1.RecordCount > 0 Then
rs1.MoveFirst
Do Until rs1.EOF
If rs3!ID = rs1!ID Then
myStr1 = rs1!ID
myStr2 = myStr2 & " " & rs1!KW
End If
rs1.MoveNext
Loop
rs3.MoveNext
End If
rs2.AddNew
rs2!ID = myStr1
rs2!KW = myStr2
rs2.Update
myStr1 = ""
myStr2 = ""
Loop

End If
rs1.Close: Set rs1 = Nothing
rs2.Close: Set rs2 = Nothing
rs3.Close: Set rs3 = Nothing
db.Close: Set db = Nothing
End Sub
    • good
    • 0
この回答へのお礼

コードまで書いていただいてありがとうございます!なるほど、これならできそうですね!ご回答ありあとうございました!!ちなみに今回はmysqlのgroup_concat関数を使おうと思います。でも、勉強になります、助かりました!

お礼日時:2011/04/20 09:19

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!