访问 sql 查询以连接行

Posted

技术标签:

【中文标题】访问 sql 查询以连接行【英文标题】:access sql query to concatenate rows 【发布时间】:2011-12-22 09:15:12 【问题描述】:

我有以下 csv 格式的数据,我以访问格式导出

House Number | Road name | Postcode
1 | alex road | sw2 4r
2 | alex road | sw2 4r
3 | alex road | sw1 2b
4 | alex road | sw2 4r
5 | alex road | sw2 4r
7 | brit road | bw2 4t
4 | brit road | bw2 4t
6 | brit road | bw2 4t
8 | brit road | bw2 4t
10 | brit road | bw2 4t

我需要一个 ACCESS SQL 查询,它可以按道路名称对所有记录进行分组,总记录可以超过 20,000 条

我需要以下格式的输出

Road Name | House Number | Postcode
--------------------------------------
alex road | 1,2,3,4,5 |  sw2 4r,sw1 2b
brit road | 7,4,6,8,10 | bw2 4t

【问题讨论】:

您正在寻找类似 @​​987654324@ 的东西,但在 MS Access 中试试这个:***.com/questions/2852892/… 【参考方案1】:

正如 oneday 在 SO 的早期帖子中指出的那样,使用 ADO 更容易,有an example here

示例查询:

   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;

使用 ADO 的函数

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

【讨论】:

【参考方案2】:

因为Access中没有group_concat这样的功能。所以我使用其内置的导入工具将我的 csv 文件导入 phpMyAdmin mysql 数据库并使用以下查询对它们进行分组

SELECT  road,pcode, group_concat(house_number) 
FROM mytable
GROUP BY road, pcode

然后使用 phpmyadmin 内置的导出工具将其导出回 csv。我不知道是否有更好的方法来做到这一点。

【讨论】:

以上是关于访问 sql 查询以连接行的主要内容,如果未能解决你的问题,请参考以下文章

SQL多表联查总结

SQL 连接行查询

数据库(MYSQL)连接查询--sql92等值连接

复杂的 SQL 连接查询 - 获取最新行

lyt经典版MySQL基础——进阶6:连接查询-sql92语法-内连接

查询分析器远程连接:sql server 不存在或拒绝访问