- ベストアンサー
行方向のデータを横に並べる
例えば以下のようなデータがあったとします 品目コード、区分 001 A 001 C 001 D 002 E 品目コードでグルーピングし区分を横に並べたデータをクエリで作成したいのです 品目コード、区分 001 A,C,D 002 E このようなデータを出力するにはどういったクエリ(SQL)を記述すればいいでしょうか? アドバイス下さい
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
Accessで処理をしたいということで。 関数を作成してクエリで使用します。 標準モジュールに以下を貼り付けます。 DAOをつかっているのでコード表の ツール→参照設定で Microsoft DAO xx Object Library にチェックを入れておいてください。 xxは3.6のような数字です。 テーブル名は実際にあわせて変更してください。 Function funcStr(ByVal mystr As String) As String Dim db As DAO.Database Dim rs As DAO.Recordset Dim strBuf As String Set db = CurrentDb Set rs = db.OpenRecordset("テーブル1") If rs.RecordCount > 0 Then rs.MoveFirst Do Until rs.EOF If mystr = rs!品目コード Then strBuf = strBuf & rs!区分 & "," End If rs.MoveNext Loop If Right(strBuf, 1) = "," Then strBuf = Left(strBuf, Len(strBuf) - 1) End If funcStr = strBuf End If rs.Close: Set rs = Nothing db.Close: Set db = Nothing End Function 次に以下のようなクエリを作成してみてください。 テーブル名は実際にあわせて変更してください。 SELECT テーブル1.品目コード, funcStr([品目コード]) AS 区分 FROM テーブル1 GROUP BY テーブル1.品目コード;
その他の回答 (2)
- m3_maki
- ベストアンサー率64% (296/460)
Access をやる者にとって、こちらが標準かと思われます。 DJoin 関数 - リスト文字列を取得する方法 http://www.f3.dion.ne.jp/~element/msaccess/AcTipsVbaDJoin.html
- OrangeCup150
- ベストアンサー率62% (109/174)
select item_cd, group_concat(tag) from item_tab group by item_cd http://dev.mysql.com/doc/refman/5.1/ja/group-by-functions.html MySQL をお使いなら上記のようなかんじになると思います。 ただ、 GROUP_CONCAT 関数に相当する機能は、各データベース製品、バージョンごとにやり方が異なります。 GROUP_CONCAT 関数をサポートしていない環境もあるので注意してください。
お礼
ありがとうございます accessでやりたかったというのを書き忘れてしまいました accessにGROUP_CONCAT 関数に相当するものがあるか探してみたのですが なさそうですね・・・