sql - 用于连接或合并相关字段的 MS Access SQL 查询

标签 sql database ms-access

如果我有以下 MS Access 表和样本数据,

Status tbl
UpdateID PK
CustomerNo text
StatusType text
UpdateDate date
UpdateID, CustomerNo, StatusType, UpdateDate
001, 0099, Open, 2011-01-01
002, 0099, Pend, 2011-01-02
003, 0100, Open, 2011-01-03
004, 0099, Appr, 2011-01-04
005, 0100, Pend, 2011-01-05
006, 0099, Clsd, 2011-01-07

那么我该如何编写一个查询来产生以下合并/串联输出?

CustomerNo, UpdateDate
0099, 2011-01-01;2011-01-02;2011-01-04;2011-01-07
0100, 2011-01-03;2011-01-05

最佳答案

如果不使用代码迭代返回的行并自行构建字符串,在 Access 中没有方便的方法来执行此操作。

这里有一些代码可以帮助你做到这一点:

Public Function ListOf(sSQL As String, Optional sSeparator As String = ", ") As String

  Dim sResults As String
  Dim rs As DAO.Recordset

  Set rs = CurrentDb.OpenRecordset(sSQL)

  While Not rs.EOF

    If sResults = "" Then
      sResults = Nz(rs.Fields(0).Value, "???")
    Else
      sResults = sResults + sSeparator & Nz(rs.Fields(0).Value, "???")
    End If

    rs.MoveNext

  Wend

  ListOf = sResults

End Function

下面是如何在 Access 查询中使用它:

 SELECT [CustomerNo], 
 (ListOf('SELECT [UpdateDate] FROM StatusTbl WHERE CustomerNo = ' + CStr([CustomerNo]))) AS UpdateDates
 FROM StatusTbl

请注意,这仅在您在 Access 中执行查询时有效,从(例如)ADO 连接执行的查询将无法 Access ListOf 函数。

关于sql - 用于连接或合并相关字段的 MS Access SQL 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4785713/

相关文章:

.net - 哪个 ORM 工具支持 Microsoft Access?

excel - VBA 如何确定当前正在哪个软件产品中运行?

php - 按 MYSQL 中的特定列排序,带有额外条件

数据库查找/字典表 - 设计问题 - 硬编码 GUID

php - 如何自动从数据库获取当前日期的数据

java - 在 sqlite 数据库中插入信息不起作用

php - 使用 SQL 查询填充 D3.js 饼图

sql - 加入 2 个表并显示所有内容

mysql - 如何替换列中的日期年份

sql - 在 Informix SQL 中计算哈希/校验和