我正在Access 2007中建立数据库,而目前我正在努力查询。在仅一栏中,可以提出多个答案。因此,当我打开查询时,当给出3个答案时,我得到3行。我想将行连接成一列。有时没有答案,有时1或2或最多3。
目前,我的查询如下所示:
列名:B-Latijnse命名(空格)B-Nederlandse命名(空格)Bloemen.B-4月2日值(空格)B-克拉斯(空格)-B-Leerkracht(空格)B-洛卡蒂
第1行 Abelmochus(空间)(空间)Zaaien(空间)1ATA(空间)Depuydt(空间)Serre 1
第2行 Abelmochus(空间)(空间)Oogsten(空间)1ATA(空间)Depuydt(空间)Serre 1
第3行 Abelmochus(空间)(空间)Bemesten(空间)1ATA(空间)Depuydt(空间)Serre 1
我希望它看起来像这样:
第1行 Abelmochus(空间)(空间)Zaaien,Oogsten,Bemesten(空间)1ATA(空间)Depuydt(空间)Serre 1
tbl称为Bloemen,这是当前查询的SQl:
SELECT Bloemen.[B - Latijnse benaming], Bloemen.[B - Nederlandse benaming], Bloemen.[B - April 2].Value, Bloemen.[B - Klas], Bloemen.[B - Leerkracht], Bloemen.[B - Locatie]
FROM Bloemen
WHERE (((Bloemen.[B - April 2].Value) Is Not Null));
Run Code Online (Sandbox Code Playgroud)
谁能帮我将行连接成一排。我不知道如何编写SQL ...我必须对48个查询执行此操作,因此当它是一种标准时,将对您有所帮助。
非常感谢!!!!!!!
乔纳斯·罗伦斯(Jonas Roelens)
怎么样:
下面的代码示例将返回SQL或字符串输入的分隔列表。这是在查询中使用它的方法:
SELECT documents.MembersOnly,
ConcatList("SELECT FName From Persons WHERE Member=True",":") AS Who,
ConcatList("",":","Mary","Joe","Pat?") AS Others
FROM documents;
Run Code Online (Sandbox Code Playgroud)
要么
SELECT tc.Company,
ConcatList("SELECT Contract
FROM tblservices
WHERE CompanyKey=" & tc.[CompanyKey],", ") AS Contracts
FROM tblCompanies tc
Run Code Online (Sandbox Code Playgroud)
样例代码
Function ConcatList(strSQL As String, strDelim, _
ParamArray NameList() As Variant)
''Reference: Microsoft DAO x.x Object Library
Dim db As Database
Dim rs As DAO.Recordset
Dim strList As String
Set db = CurrentDb
If strSQL <> "" Then
Set rs = db.OpenRecordset(strSQL)
Do While Not rs.EOF
strList = strList & strDelim & rs.Fields(0)
rs.MoveNext
Loop
strList = Mid(strList, Len(strDelim) + 1)
Else
strList = Join(NameList, strDelim)
End If
ConcatList = strList
End Function
Run Code Online (Sandbox Code Playgroud)
来自:http : //wiki.lessthandot.com/index.php/Concatenate_a_List_into_a_Single_Field_%28Column%29
现在,上面的链接包括下面的ADO版本,如果从未添加版本,我会在此将其称为@oneday。
这更快,更容易,但是对字段(列)名称更加敏感。您需要确保它们不是保留字。ADO版本的另一个优点是您不必限制要连接的列数:
SELECT d.DeptID, d.Department,
ConcatADO("SELECT FName & ' ' & SName, Address FROM Persons
WHERE DeptID=" & [d].[DeptID],", "," : ") AS Who
FROM Departments AS d INNER JOIN Persons AS p ON d.DeptID = p.DeptID
GROUP BY d.DeptID, d.Department, 3;
Function ConcatADO(strSQL As String, strColDelim, _
strRowDelim, ParamArray NameList() As Variant)
Dim rs As New ADODB.Recordset
Dim strList As String
On Error GoTo Proc_Err
If strSQL <> "" Then
rs.Open strSQL, CurrentProject.Connection
strList = rs.GetString(, , strColDelim, strRowDelim)
strList = Mid(strList, 1, Len(strList) - Len(strRowDelim))
Else
strList = Join(NameList, strColDelim)
End If
ConcatADO = strList
Exit Function
Proc_Err:
ConcatADO = "***" & UCase(Err.Description)
End Function
Run Code Online (Sandbox Code Playgroud)