首页 > 解决方案 > Microsoft Access 2016 使用 SQL 汇总和合并表

问题描述

我有一个表格,我需要对其进行格式化以用于手动上传过程。该表有数千行,因此我需要使用可重复的过程来快速将提供给我的数据的方式修复为所需的数据。我对今天数据传给我的方式的控制能力为零。但是,由于系统限制,我必须对其进行格式化才能使用它。我当前的表是 4 列,我需要将其输出为 3 列。我必须按字段名称分组:“品牌”和“促销”。字段名称:“skus” 我需要通过单个“品牌”和“促销”组合将它们合并为一个连续的字符串。

在此处输入图像描述

给定品牌存在重复的“促销”,因为它们是在产品级别创建的。但是,他们进入的系统需要是“品牌”、“促销”、“skus”。

不确定我是否需要使用 VBA 在 Access 中执行某些操作。或者我可以在两个不同的查询中执行此操作。

标签: vbams-accessms-access-2016

解决方案


您将需要使用一些 VBA 来执行此操作。VBA 将需要循环从按品牌和促销过滤的表中的数据记录集,并建立 sku 字符串。可能是这样的:

Function fJoinData(strBrand As String, strPromotion As String) As String
    On Error GoTo E_Handle
    Dim db As DAO.Database
    Dim rsData As DAO.Recordset
    Dim strSQL As String
    Set db = DBEngine(0)(0)
    strSQL = "SELECT skus FROM Table1 " _
        & " WHERE Brand='" & strBrand & "' " _
        & " AND Promotion='" & strPromotion & "';"
    Set rsData = db.OpenRecordset(strSQL)
    If Not (rsData.BOF And rsData.EOF) Then
        Do
            fJoinData = fJoinData & ", " & rsData!skus
            rsData.MoveNext
        Loop Until rsData.EOF
    End If
    If Left(fJoinData, 2) = ", " Then fJoinData = Mid(fJoinData, 3)
fExit:
    On Error Resume Next
    rsData.Close
    Set rsData = Nothing
    Set db = Nothing
    Exit Function
E_Handle:
    MsgBox Err.Description & vbCrLf & vbCrLf & "fJoinData", vbOKOnly + vbCritical, "Error: " & Err.Number
    Resume fExit
End Function

我建议不要插入到表中,而是创建一个可以导出的查询:

SELECT DISTINCT 
    T.Brand, 
    T.Promotion, 
    fJoinData(T.Brand,T.Promotion) AS skus
FROM Table1 AS T

问候,


推荐阅读