2

私はここに来たばかりで、Access SQL のデータ マージの問題を解決するための助けが必要でした。

実はこれを回したい

Customer    Comment 
James        Good
James        Bad
James        Good
James        Ugly

これに:

Customer    Comments
James       Good, Bad, Good, Ugly

PHPでクエリを実行しているため、VBAなしで同じ顧客のすべてのコメントを1つのフィールドに連結する必要があります

ありがとう

4

2 に答える 2

2

うーん...コメントを適切に連結する方法は知っていますが、顧客を引き寄せる方法がわかりません。Access はストアド プロシージャをサポートしていないため、これが Access で機能するかどうかもわかりません。

DECLARE @Comments VARCHAR(8000)  
SELECT @Comments = COALESCE(@Comments + ', ', '') + Comments FROM Customers

複数の顧客に対してこれを行う必要があると思いますが、顧客ごとに CURSOR を使用することしか考えられませんが、現時点で Access がカーソルをサポートしているかどうかはわかりません。

DECLARE @Comments VARCHAR(8000)  
SELECT @Comments = COALESCE(@Comments + ', ', '') + Comments 
FROM Customers
WHERE Customer = @Customer (i.e. James, from the cursor)

正直なところ、PHP でこれを行うのは行き詰まっていると思います。

SELECT * FROM CUSTOMERS ORDER BY Customer, Comment

次に、レコードセットを単純にループし、Customer が変更されたら、次の顧客の Comments 変数をリセットします。

于 2012-07-08T16:55:44.743 に答える
0

これを行う最良の方法は、データベースから一致するすべての行をロードし、それらをPHPで連結することです。

カスタム関数を使用して、非効率的ではありますが、Accessにこれを実行させることができます。

Public Function CommentsForCustomer(Customer As String)
   Dim sql As String
   sql = "select [Comment] from Comments where Customer = '" & Customer & "'"

   Dim rs As New ADODB.Recordset
   rs.Open sql, CurrentProject.Connection, adOpenSnapshot

   Dim text As String
   text = ""
   Do Until rs.EOF
       If Len(text) > 0 Then
           text = text & ", "
       End If
       text = text & rs.Fields("Comment")
       rs.MoveNext
   Loop
   rs.Close

   CommentsForCustomer = text
End Function

次に、式CommentsForCustomer([Customer])をクエリに含めます。

于 2012-07-08T17:52:35.643 に答える