对于一个人有多辆车、一个学生多门成绩这种情况,有时是两张表,一个是学生信息表,一个是车牌或成绩表,这个表里面同一姓名会有多条记录。如果需要做成一张一览表,怎么写查询呢?
粘入以下代码:
Public Function GroupConcat(TableName As String, FieldName As String, GroupField As String, GroupValue As String) As String
Dim ResultStr As String
Dim sql As String
Dim rs As ADODB.Recordset
sql = "select " & FieldName & " from " & TableName & " where " & GroupField & "='" & GroupValue & "'"
Set rs = New ADODB.Recordset
rs.Open sql, CurrentProject.Connection, adOpenForwardOnly, adLockReadOnly
Do While Not rs.EOF
ResultStr = ResultStr & "," & rs.Fields(0).Value
rs.MoveNext
Loop
If ResultStr <> "" Then ResultStr = Mid(ResultStr, 2)
GroupConcat = ResultStr
End Function
创建查询时引用此函数:
GroupConcat('表名','合并字段','分组字段',分组字段值)
如两个表,用户表(姓名,手机),车牌表(姓名,车牌号)
select 姓名,手机,GroupConcat('车牌表','车牌号','姓名',姓名) from 用户表
显示结果:
张三 13018004321 车牌1,车牌2
李四 13986866565 车牌1
以上仅在ACCESS 程序中使用,使用ADO等在SQL语句中不能使用。
如果是SQL SERVER 数据库,可以SQL语句中使用以下:
select 分组字段,(SELECT [合并字段]FROM 表名 t
WHERE t.分组字段 = 表名.分组字段
FOR xml path(''))
from 表名 group by 分组字段