- ベストアンサー
ACCESS 一つのフィールドに複数レコードの値をセットしたい
どなたか教えて下さい。 Aテーブルに、(1)コード (2)No というフィールドがあります。 例) (1) (2) 1111 1 1112 2 1113 3 1111 4 この内容を、別テーブルに、 (1)コード (2) 1111 1,4 1112 2 1113 3 と、同一コードであれば、(2)フィールドにカンマ付きで全て 表示したいのです。 どなたか、お知恵をお貸し下さい。 よろしくおねがいいたします。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
- ベストアンサー
データベース関数などと命名した標準モジュールに以下の関数をコピペして保存して下さい。 次に、イミディエイトウインドウでテストして頂ければ幸いです。 [イミディエイト] ? DBSelect("SELECT F2 FROM A WHERE F1=1111") 1;4 ? DBSelect("SELECT F2 FROM A WHERE F1=1111", " And ") 1 And 4 And Public Function DBSelect(ByVal strQuerySQL As String, _ Optional ByVal strSeparator As String = ";") As String On Error GoTo Err_DBSelect Dim I As Integer Dim J As Integer Dim R As Integer Dim C As Integer Dim M As Integer Dim N As Integer Dim rst As ADODB.Recordset Dim fld As ADODB.Field Dim Datas As String Set rst = New ADODB.Recordset ' ================= ' Begin With: rst ' ----------------- With rst .Open strQuerySQL, _ CurrentProject.Connection, _ adOpenStatic, _ adLockReadOnly If Not .BOF Then M = .RecordCount - 1 N = .Fields.Count - 1 .MoveFirst For R = 0 To M For C = 0 To N Datas = Datas & .Fields(C) & strSeparator Next C .MoveNext Next R End If End With ' --------------- ' End With: rst ' =============== Exit_DBSelect: DBSelect = Left(Datas, Len(Datas) + (Len(Datas) > 0)) Exit Function Err_DBSelect: MsgBox "SELECT 文の実行時にエラーが発生しました。(DBSelect)" & Chr$(13) & Chr$(13) & _ "・Err.Description=" & Err.Description & Chr$(13) & _ "・SQL Text=" & strQuerySQL, _ vbExclamation, " 関数エラーメッセージ" Resume Exit_DBSelect End Function
その他の回答 (3)
No1 さんの回答を具体化すれば・・・。 <A> ID___F1_____F2 1____1111__1 2____1112__2 3____1113__3 4____1111__4 <クエリ2> F1_______F2_New 1111____1,4 1112____2 1113____3 このクエリを SQLビューで見れば、割と簡単なものです。 SELECT A.F1, DBSELECT("SELECT F2 FROM A WHERE F1=" & F1, ",") AS F2_New FROM A GROUP BY A.F1; まあ、課題は、DBSelect関数を用意できるか否かです。 <続く>
- tsukasa-12r
- ベストアンサー率65% (358/549)
VBA ( DAO 使用 ) で作ってみました。( このプログラムのまま使用するのであれば参照設定で Microsoft DAO X.X Object Library を設定してください。) Aテーブル→Table1 別テーブル→Table2 としました。 また、Table2 は空であることが前提です。 Private Sub コマンド0_Click() Dim rsCode As Recordset Dim strWhere As String Dim rsNo As Recordset Dim rsDst As Recordset Dim strNos As String Set rsCode = CurrentDb.OpenRecordset("SELECT DISTINCT Table1.コード FROM Table1", dbOpenForwardOnly) Set rsDst = CurrentDb.OpenRecordset("SELECT * FROM Table2", dbOpenDynaset) Do Until rsCode.EOF strWhere = "WHERE Table1.コード=""" & rsCode.Fields("コード").Value & """" Set rsNo = CurrentDb.OpenRecordset("SELECT Table1.No FROM Table1 " & strWhere, dbOpenForwardOnly) strNos = "" Do Until rsNo.EOF If strNos <> "" Then strNos = strNos & "," End If strNos = strNos & rsNo.Fields("No").Value rsNo.MoveNext Loop Set rsNo = Nothing With rsDst .AddNew .Fields("コード") = rsCode.Fields("コード").Value .Fields("NO").Value = strNos .Update End With rsCode.MoveNext Loop Set rsCode = Nothing End Sub
こんばんは! ご質問を読んで、 横もちに替えるためにクロス集計して、 カンマで結合させるユーザー定義関数を作って文字連結させる方法 があるかなぁって思いました。 カンマつきではありませんが、 文字連結部分のSQLのご参考になれば。。。 SELECT T.コード, [1] & [2] & [3] & [4] AS 番号 FROM [ TRANSFORM Min(番号) SELECT コード FROM Aテーブル GROUP BY コード PIVOT 番号 In(1,2,3,4);]. as T