• ベストアンサー

行方向のデータを横に並べる

例えば以下のようなデータがあったとします 品目コード、区分 001 A 001 C 001 D 002 E 品目コードでグルーピングし区分を横に並べたデータをクエリで作成したいのです 品目コード、区分 001 A,C,D 002 E このようなデータを出力するにはどういったクエリ(SQL)を記述すればいいでしょうか? アドバイス下さい

  • nobi12
  • お礼率76% (183/239)

質問者が選んだベストアンサー

  • ベストアンサー
  • piroin654
  • ベストアンサー率75% (692/917)
回答No.2

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% (295/459)
回答No.3

Access をやる者にとって、こちらが標準かと思われます。 DJoin 関数 - リスト文字列を取得する方法 http://www.f3.dion.ne.jp/~element/msaccess/AcTipsVbaDJoin.html

回答No.1

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 関数をサポートしていない環境もあるので注意してください。

nobi12
質問者

お礼

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

関連するQ&A

  • 指定した区分と一致するコードは取得しないSQL

    いつもお世話になります。 以下のデータ構成で、区分に「A01」「D01」のいづれかが含まれているコードは 取得しないようにしたいのですが、これを、SQLのみで実現するためにはどのように すればよいでしょうか。 【テーブル】 コード 区分 10000  A01 10000  B01 10000  C01 20000  C01 20000  D01 30000  B01 30000  E01 40000  B01 40000  E01 40000  F01 ↓ 【結果】 30000 40000 ※コード10000はA01が含まれており、20000はD01が含まれているため対象外 普通のプログラムならば、全て取得してきて、ループしながら該当する区分の場合は continueするなりしてはじけばい、というように想像できるのですが、SQLのみでやるということで、 ループ処理は行えないためどうしてもスマートな方法が思いつきません。 何かよい方法はないでしょうか。 宜しくお願いします。

  • クエリでこのテーブルのデータにあったら○○を表示。

    アクセスのクエリについてですが、 A,B 2つのテーブルから一つの表を作っています。 (ここはとあるキーで単純に項目を選んで出力) そこに「区分」という項目を出力したいと思います。 その区分に表示する文字は別のCテーブルにあるIDと一致したら 「在庫」、また別のDテーブルにあるIDと一致したら「返却」といった具合に、文字を出力したいです。 「区分」の条件?をどのように記述したらよろしいでしょうか。 よろしくお願いします。

  • エクセル 縦方向に並んでるデータを、横方向に並べたい

    例) シート1に以下のデータがあります。   A  B C D  名前 日付 点 評価 1 山田 3/18 90 A 2 山田 3/20 65 B 3 佐藤 2/28 40 D 4 佐藤 3/11 90 A 5 佐藤 3/13 85 A . . これをシート2に、   A  B C D E F G H I J 1 山田 3/18 90 A 3/20 65 B 2 佐藤 2/28 40 D 3/11 90 A 3/13 85 A・・・・ . . というように名前を元に時系列にして横に並び替えたいのです。 リアルタイムに更新するわけではないので、作業が複数回に わかれてもかまいません。 変換元の横列の項目は4項目(名前・日付・点・評価)のみですが、 縦列の同じ名前の件数は最大で20件ほどあり、これからも増えます。 何かよい方法はありますでしょうか?

  • Excelのシートにある1行のデータを複数行に分割したい

    例えば次のようなことがしたいのですが、VBA以外ではできないでしょうか? 何か方法があったら教えてください。 ・A:コード B:氏名 C:生年月日 D:住所 E:TEL というように横に並んだデータがあるとします。 ・一番上の行は標題部分になっており、次の行からデータが縦に100行分程度あります。 ・この1行分のデータを2行(すべてに標題をつけたいので実質は4行)に返還したいのです。 (1行目:標題)A:コード B:氏名 C:生年月日 (2行目) 標題に対応したデータ (3行目:標題)D:住所 E:TEL  (4行目) 標題に対応したデータ これで意味がわかるでしょうか? よろしくお願いします。

  • Access クエリの記述に関して

    Access2007を使っています。 クエリの記述で解決できなかったのでアドバイスを頂きたいです。 処理内容は 大人数の毎月の体重を計測したデータがあります。 その月に計測しない人もいます テーブルの属性は3つ。 "個人ID","月数","体重" A,1,50 B,1,55 C,1,60 D,1,56 E,1,63 ・・・ A,2,51 B,2,54 C,2,63 E,2,62 ・・・ A,3,49 B,3,50 D,3,54 E,3,60 ・・・ このデータから "個人ID","1","2","3",・・・ A,50,51,49,・・・ B,55,54,,50,・・・ C,60,63,・・・ D,56,,3,・・・ E,63,62,60,・・・ というように、個人ごとの月による推移が分かるようなクエリを作り、CSVに出力したいと 考えています。 このようなクエリを教えていただけないでしょうか? またはもっと簡単な方法がありますか??    

  • マスタシートと同じデータがあれば横にデータを貼り付けていく。

    シート1の品番を基準にし、シート2に同じ品番があればシート1の品番とデータの横にシート2のデータを貼り付けていく。次にシート3に移り繰り返し。 (シート1) | A | B | C | D 1 | 1a| 1 | 9 | 2 2 | 2a| 4 | 7 | 1  ・  ・  ・ A列に品番、B列に枚数、C列に最高数、D列に最低数が入ってます。 (シート2) | A | B | C | D 1 | 1a| 2 | 8 | 1 2 | 3a| 3 | 5 | 3 ・  ・  ・ シート1と同じ形式です。 (シート1)↓こうしたいです。 | A | B | C | D | E | F | G | 1 | 1a| 1 | 9 | 2 | 2 | 8 | 1 | 2 | 2a| 4 | 7 | 1 | A列の品番と同じであればその横(列)に枚数、最高数、最低数のデータを貼り付けていきたいのです。 シート数とデータ数はその時々により減ったり増えたりと変化します。 エクセル2000です。 わかる方、よろしくお願いします。

  • 1行のデータをスペースで区切って各セルへ振り分けるには?

    いつもお世話になっております。 再びつまづいてしまったため、お教えいただきたく、宜しくお願い致します。 1行目はタイトル 2行目はデータ作成日 3行目は項目 が入力されております。 4行目からデータが入っているのですが、A列内に1行でまとまっている状態です。 個々のデータの間は半角スペースで区切ってあり、このスペースを利用して、3行目の項目のセルへデータを移動したいと考えております。 下記が表の状態です。 |   A  |   B   |   C  |D |E | 1|タイトル  | 2|データ作成日| 3|  番号  |都道府県コード|市町村コード|番地|備考| 4|012-3456789 04679 003 ●□△659-8 ◎●△□●~| 5|123-4567890 00367 048 ■○●△4-9-2 △●□~| 4行目からがデータ群です。B列から右側にはデータが存在しません。 理想は下記の通りです。 |   A  |   B   |   C  |   D   |E | 1|タイトル  | 2|データ作成日| 3|  番号  |都道府県コード|市町村コード|  番地   |備考| 4|012-3456789 |  04679   |  003   |●□△659-8 |◎●△□●~| 5|123-4567890 |  00367   |  048   |■○●△4-9-2|△●□~| 下記のように組んでみました。 Worksheets("Sheet1").select Range("B4").Select Dim c As Range Dim j As Variant For Each c In Selection j =Split(c.Value," ") c =Offset(0,0).Resize(1,UBound(j)+1)=j Next c End Sub 4行目のみ理想通りに動き、5行目からがどうしても動きません。 環境はExcelは2002です。 以上、宜しくお願い致します。

  • SQL Server 縦データを横データに

    お世話になります。 下記のテーブルから下記の条件で データを出力するSQL文を作成したいのです。 アドバイスお願い致します。 条件1:NAMEはAを抽出 条件2:ICHIはグループ集計 条件3:ITEMはD2とD3を抽出 TESTテーブル NAME ICHI ITEM DATA ----- ---- ---- ---- A A1 D1 1 A A1 D2 2 A A1 D3 3 A A1 D4 4 A A2 D1 10 A A2 D2 20 A A2 D3 30 A A2 D4 40 B A3 D1 100 B A3 D2 200 B A3 D3 300 B A3 D4 400 データ出力結果 NAME ICHI DATA DATA ----- ---- ---- ---- A A1 2 3 A A2 20 30

  • 2行読み込んで一行戻り、また2行読み込む

    2行読み込んで一行戻り、また2行読み込む はじめまして、現在、「2行読み込み、一行戻り、また2行読み込む」処理のものを作成しています。 具体的には、 A B C D E と5行に渡り記述されたファイルを上記の旨で表示させる場合、 A B B C C D D E としたいのですが、 filename = ARGV[0] ABCDE = [] file = open(filename) while f = file.gets do  f.chomp!   g = file.gets   g.chomp!  p f  p g end file.close とすると出力は "A" "B" "C" "D" abcde.rb:9: private method `chomp!' called for nil:NilClass (NoMethodError) もちろん2行読み込んで、そのまま次の2行を読み込む記述のため上記のようになってしまいます。 まとめますと、 「一行戻るための記述がわからないので、それを実現するための記述を教えてほしい」 ということです。 rewindを使うと先頭まで戻ってしまうのでどうしたらいいのかさっぱりです。 わかりづらくて非常に申し訳ない、初歩的であろう質問ですがよろしくお願いします。 rubyは1.8.6を使っています。

    • ベストアンサー
    • Ruby
  • Access2000のデーター集計

    Access2000の二つのクエリーのデーターをくっつけて金額を集計したいのですが、どなたか教えていただきませんか? クエリー1 データA、データB、金額 データC、データD、金額 クエリー2 データA、データB、金額 データE、データF、金額 集計結果クエリー データA、データB、金額 データC、データD、金額 データE、データF、金額 宜しくお願いします。