获取不同SQL访问记录的值为1

时间:2012-07-08 16:37:25

标签: php sql database ms-access ms-access-2007

我是新来的,我想帮助解决Access SQL数据合并问题。

其实我想转这个

Customer    Comment 
James        Good
James        Bad
James        Good
James        Ugly

进入这个:

Customer    Comments
James       Good, Bad, Good, Ugly

我需要在不使用VBA的情况下将同一客户的所有注释连接到一个字段,因为我正在使用PHP执行查询

由于

2 个答案:

答案 0 :(得分:2)

嗯......我知道如何正确地连接评论,但我不确定如何拉客户。我也不确定这是否适用于Access,因为Access不支持存储过程。

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

我猜你不得不为多个客户做这件事,但我能想到的就是为每个客户使用CURSOR,但我不知道Access目前是否支持游标。 / p>

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

然后只需遍历记录集,当客户更改时,重置下一个客户的Comments变量。

答案 1 :(得分: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])