プロが教える店舗&オフィスのセキュリティ対策術

例えば以下のようなデータがあったとします

品目コード、区分
001 A
001 C
001 D
002 E

品目コードでグルーピングし区分を横に並べたデータをクエリで作成したいのです

品目コード、区分
001 A,C,D
002 E

このようなデータを出力するにはどういったクエリ(SQL)を記述すればいいでしょうか?
アドバイス下さい

A 回答 (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.品目コード;
    • good
    • 0

Access をやる者にとって、こちらが標準かと思われます。



DJoin 関数 - リスト文字列を取得する方法
http://www.f3.dion.ne.jp/~element/msaccess/AcTip …
    • good
    • 0

select item_cd, group_concat(tag)


from item_tab
group by item_cd

http://dev.mysql.com/doc/refman/5.1/ja/group-by- …

MySQL をお使いなら上記のようなかんじになると思います。
ただ、 GROUP_CONCAT 関数に相当する機能は、各データベース製品、バージョンごとにやり方が異なります。 GROUP_CONCAT 関数をサポートしていない環境もあるので注意してください。
    • good
    • 0
この回答へのお礼

ありがとうございます
accessでやりたかったというのを書き忘れてしまいました
accessにGROUP_CONCAT 関数に相当するものがあるか探してみたのですが
なさそうですね・・・

お礼日時:2013/04/26 07:19

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

このQ&Aを見た人はこんなQ&Aも見ています

関連するカテゴリからQ&Aを探す