将行串联为1-Access 2007

0 ms-access

我正在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)

Fio*_*ala 5

怎么样:

下面的代码示例将返回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)