Accessのクエリーでレコードのグループ化を行っている状態で、あるフィールドに対してだけ文字列の結合を行いたいのですが、集計部分をどのように指定すればよいかわからず困っています。

イメージとしては、SQLビューにて、グループ化されたレコードの合計が、
 SUM([テーブル名].[フィールド名])
で求められる様に、
エクセルの文字列結合関数
 CONCATENATE([テーブル名].[フィールド名])
が使いたい、という感じです、、

Accessにおける文字列結合は"&"を使うとありましたが、この場合どのように記述するべきでしょうか?

このQ&Aに関連する最新のQ&A

A 回答 (2件)

Excelでの「同一行の各列のテキストデータを連結」と同様の操作であれば、No.1の方が答えられている方法でできます。



例)
ID GrNo テキスト1 テキスト2 テキスト3
1  1 テスト1   テスト2  テスト3
2  1 テスト4   テスト5  テスト6

→GrNoでグループ化して集計を掛ける際、
 「[テキスト1] & [テキスト2] & [テキスト3]」の式をフィールドとして指定すれば
  ID=1では「テスト1テスト2テスト3」が返される。


ただ、もし「同一列の各行のテキストデータを連結」を想定されているのだとすると、これはAccessに備え付けの関数では対処できません。
・・・もしかしたら私が知らないだけかもしれませんが(汗)

例)
ID GrNo テキスト
1  1   テスト1
2  1   テスト2
3  1   テスト3
4  2   テスト4
5  2   テスト5

→GrNoでグループ化して集計をかけた場合に、
  GrNo=1で「テスト1テスト2テスト3」を返す式は用意されていない。
  (あるのは「First(先頭)」などの1レコードのデータを参照する式か、
   「SUM」などの数値の演算結果を表示させる式のみ)


なので、どうしても下側の例のようなデータを作成したいということでしたら、
一旦フォームなどで同GrNoのレコードを表示させた上で、そのフォームを
順次レコード移動しながら「テキスト」フィールドを連結させ、
それをGrNoとセットにして別のテーブルに保存、
といった回りくどいことをするぐらいしか、今のところ思いつきません。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございました。
やはり、同一列グループ化後の文字列結合は用意されていないのですね、、(T-T)

別の代替方法を探してみます。

ありがとうございました。

お礼日時:2005/09/21 12:28

データをもう少し具体的に示したほうがよろしいでしょう。



tblAに列A、列B、列Cがあるとして、
select 列A & 列B & 列C from tblA;
でしょうね。

カンマ区切りにしたければ
select 列A & ',' & 列B & ',' & 列C from tblA;
でしょう。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございました。
同一行でのテキスト連結はこれで可能でしたが、
今回知りたかったのは、同一列のグループ化された
レコードの連結方法でした。
説明不足で申し訳ありませんでした。

お礼日時:2005/09/21 09:48

このQ&Aに関連する人気のQ&A

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

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

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

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Q「[Microsoft][ODBC SQL Server Driver]COUNT フィールドが正しくありません。」えらーについて

おせわになります、

JavaからMSDEに対してSELECT UPDATE等の処理を行っているのですが。以下のSQLエラーが出てしまいます。
どのような意味なのでしょうか?
雰囲気としてはUPDATE文でおこっているような感じなのですが…

----エラーメッセージ------
[Microsoft][ODBC SQL Server Driver]COUNT フィールドが正しくありません。

よろしくお願いします。

Aベストアンサー

こんな情報がありましたという報告です。

「COUNT フィールドが正しくありません。」
で、検索をしたら同じような事例がありました。

2件ほどヒットしたのですが、どちらもテーブルのフィールド名を英数字にすることで解決しているようでした。

何故かというのは私にもわかりません。
お役に立つと良いのですが・・・

ちなみにヒットしたのは、「Goo」と「Google」です。
一度調べてみてください。(個人の情報っぽいのでURLは載せません。)

Q[Oracle][IBM DB2][SQL Server]の違いと適性

現在、Accessで業務アプリケーションを作成しているのですが、そろそろパフォーマンス的にも限界で、というかC/S環境でAccessを使っていること自体危険ですね…

ここでデータベースをグレードアップしようと思っています。
しかし、データベースと言ってもたくさんあり、どれがいいのか
迷っています。

現在、商用RDBMSでは[Oracle][IBM DB2][SQL Server]がメインとの
ことですが、これらの違いが分かりせん。

うちの規模は社員数が40人程度です
Oracleは大規模システム向けと聞いた事があるのですが、
それであれば、IBM DB2かSQL Serverなのでしょうか

御教授宜しくお願いします。

Aベストアンサー

SEじゃないですけど、現状でどの辺りがボトルネックになっているかまず分析する必要がありますよ、案外ハード(サーバー本体)の方がいっぱいいっぱいてこともありますから、仮にHDDのディスクアクセスの場合シリコンディスクに置き換える、メインメモリの増設などがあります。逆にソフト側(MSアクセス)で同時接続多・同時更新多・データ肥大化の場合はやはりDBエンジンを変更するしかないでしょう。自社で開発するなら(情報量の多い)SQLServer。外注の場合は先方によって得手不得手がありますので一概には言えませんがオラクルでしょうこれしかないです(規模は関係なし)。DB2は使ったことがありません。他にもたくさんデータベースエンジンがありますので・・・

参考URL:http://ja.wikipedia.org/wiki/関係データベース管理システム

Q[Access]異なるレコード間の文字列連結

いつもお世話になっております。
早速ですがAccess(初心者です)での質問です。

以下のようなテーブルがあります。

ID|番号(1)|番号(2)|実績
1 |113355 |AA| 152
2 |112211 |VV| 27
3 |112222 |VV| 90
4 |113355 |CX| 8
5 |112222 |SD| 110
………………・・・(以下略)

番号(1)が同じなら、番号(2)を"/"で区切り、連結して
別のテーブルを作成しようとしています。

ID|番号(1)|番号(2)
1 |113355 |AA/CX
2 |112211 |VV
3 |112222 |VV/SD
………………・・・
が、なかなか良い方法が思いつきません。
皆様のお力を貸してください。どうぞ宜しくお願いいたします。

Aベストアンサー

VBAを使って、レコードを1件ずつ読み込んで書き込むというやり方が良いんじゃないかと思います。

考え方としては、

元のテーブルで番号(1)を基準に並べ替えをする
元のテーブルの最初のレコードから順に番号(1)の値を比較しながら番号(2)を書き込んでいくようにする

手作業でやるとしたら、

元のテーブルをそのままコピーする
番号(1)で並べ替えをする
レコードを見ながら番号(2)を書き換える
番号(2)が書き終わったら番号(1)のダブっているレコードを削除する

Q他テーブルの同フィールドを結合する方法

お世話になります。
Access2000で教えてください。

下記のようなテーブル1,2があります。
このテーブル1,2をひっつけて、
テーブル3を作成したいのですが、
どのように作成すればよいでしょうか?
可能でしたら、クエリで、
説明しやすいのでしたら、SQLでも
結構ですので宜しくお願い致します。
-----------------------------------
テーブル1
名前  1着数
やまだ 3
-----------------------------------
テーブル2
名前 2着数
やまだ 1
-----------------------------------
テーブル3
名前 1,2着数
やまだ 4

Aベストアンサー

http://www.mahoutsukaino.com/ac/ac2000/ac2000/actionq/action03.htm

ここに非常に判りやすく書かれています。

>んでは、まずは普通にクエリを作り始めます。

ここまで出来たら、完成したも同然です。
添付画像を手掛かりにアタックされてください。

QAccessでテーブルの文字列フィールドを連結する

次のようなフィールドが2列のデータがあります。

1:りんご
1:みかん
1:バナナ
2:みかん
2:ぶどう
3:りんご
3:バナナ

それを

1:りんご、みかん、バナナ
2:みかん、ぶどう
3:りんご、バナナ

とクエリーでまとめたいのですが
どのようにしたらよろしいでしょうか?

Aベストアンサー

SQLだけでは難しいですね。
パフォーマンスは保証できませんが、オリジナル関数を作るしかないでしょう。

FruitTBL

ID FName
1 りんご
1 みかん
1 バナナ
2 みかん
2 ぶどう
3 りんご
3 バナナ

とすると、


標準モジュールに
Option Compare Database
Option Explicit


Public Function GetNames(lngID As Long, strDel As String) As String
Dim rs As New ADODB.Recordset
Dim strSQL As String
Dim strRet As String


strSQL = "SELECT FName FROM FruitTBL WHERE ID = " & CStr(lngID)
rs.Open strSQL, CurrentProject.Connection, adOpenKeyset, adLockOptimistic

strRet = ""
Do Until rs.EOF
strRet = strRet & rs.Fields(0).Value & strDel
rs.MoveNext
Loop

strRet = Left(strRet, Len(strRet) - Len(strDel))
rs.Close
Set rs = Nothing

GetNames = strRet

End Function


クエリーで

SELECT ID, GetNames(ID,",") AS Name
FROM FruitTBL
GROUP BY ID



こんなのでいかがでしょうか?
意味があるかは分かりませんが、テーブル名などもパラメータに
出来なくもないので工夫してください。

バージョンが分からなかったので適当ですが…。

SQLだけでは難しいですね。
パフォーマンスは保証できませんが、オリジナル関数を作るしかないでしょう。

FruitTBL

ID FName
1 りんご
1 みかん
1 バナナ
2 みかん
2 ぶどう
3 りんご
3 バナナ

とすると、


標準モジュールに
Option Compare Database
Option Explicit


Public Function GetNames(lngID As Long, strDel As String) As String
Dim rs As New ADODB.Recordset
Dim strSQL As String
Dim strRet As String


strSQL = "SELECT FName FROM ...続きを読む


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング

おすすめ情報