人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

Accessの更新クエリに関する質問です。
以下の様なテーブルAがあったとして、
|*ID1|*ID2|*文字列|
|1|1|赤|
|1|2|青|
|1|3|白|
|1|4|黒|
|2|1|橙|
|2|2|灰|
|3|1|黄|
|:|:|:|

テーブルBを、ID2順に文字列を連結して、
|*ID1|*文字列|
|1|赤青白黒|
|2|橙灰|
|3|黄|
|:|:|
等としたいのです。

必ずしもID2順とならずに文字を連結するだけなら何とかなったのですが、
連結の順番を制御する方法がわかりませんでした。

「ADOなどでぐるぐる」ではなく、更新クエリでスパッと解決できると助かります。
(表組み記法が相変わらず良く判りません。見にくくて申し訳ありません。。)

●質問者: oich
●カテゴリ:コンピュータ
✍キーワード:access クエリ 文字列 更新 記法
○ 状態 :終了
└ 回答数 : 3/3件

▽最新の回答へ

1 ● ghfgbhdb
●0ポイント

こちらで解決できます。


http://sooda.jp/questions/

◎質問者からの返答

解決できませんでした。


2 ● tak_tm
●40ポイント

こういうのでしょうか?

階層数が決まっていないと使えませんが。

SELECT t123.ID1, t123.文字列 & t4.文字列 AS 文字列

FROM (SELECT t12.ID1, t12.文字列 & t3.文字列 AS 文字列

FROM (SELECT t1.ID1, t1.文字列 & t2.文字列 AS 文字列

FROM (SELECT * FROM テーブルA WHERE ID2 = 1) AS t1

LEFT OUTER JOIN (SELECT * FROM テーブルA WHERE ID2 = 2) AS t2 ON t1.ID1 = t2.ID1) AS t12

LEFT OUTER JOIN (SELECT * FROM テーブルA WHERE ID2 = 3) AS t3 ON t12.ID1 = t3.ID1) AS t123

LEFT OUTER JOIN (SELECT * FROM テーブルA WHERE ID2 = 4) AS t4 ON t123.ID1 = t4.ID1

ORDER BY t1.ID1

◎質問者からの返答

お教えいただいた方法で当面は解決しそうですが、やはり階層数が不定なので少し不安です。

もし可能なら階層数の上限が不明でも通用する方法があると助かります。


3 ● tak_tm
●40ポイント ベストアンサー

階層をレコード内容に合わせる場合だと、

VBAでSQLを書き換えるのが良いかと思います

以下のコードで、"クエリA" という名前のクエリの内容を書き換えられます

フォームのボタンクリックなどから呼び出す形を想定しています

※ 予め "クエリA" を作成しておかないとエラーになります

Sub editSQL()

Dim sql As String, qry As QueryDef, tName As String, i As Integer, n As Integer

'テーブルA内のID2最大値

n = DMax("ID2", "テーブルA")

'各初期値

tName = "t1"

sql = "SELECT * FROM テーブルA WHERE ID2 = 1"

'ループしてSQLを作成

For i = 2 To n

sql = "SELECT " & tName & ".ID1, " & tName & ".文字列 " & Chr(38) & " t" & i & ".文字列 AS 文字列 " & vbCrLf _

& "FROM (" & sql & ") AS " & tName & " " & vbCrLf _

& "LEFT OUTER JOIN (SELECT * FROM テーブルA WHERE ID2 = " & i & ") AS t" & i & " ON " & tName & ".ID1 = t" & i & ".ID1 "

tName = tName & i

Next

Set qry = CurrentDb.QueryDefs("クエリA")

qry.sql = sql

Set qry = Nothing

DoCmd.OpenQuery "クエリA"

End Sub

◎質問者からの返答

ご指摘の方法で解決できそうですね。2度目のご回答ありがとうございました。

もしかするとさらにエレガントな方法があるかもしれませんので、もうしばらく回答募集中にしておきます。

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ