【问题标题】:Microsoft Access 2016 Summarize and Merge Table with SQLMicrosoft Access 2016 使用 SQL 汇总和合并表
【发布时间】:2020-10-17 14:46:46
【问题描述】:

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

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

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

【问题讨论】:

    标签: vba ms-access ms-access-2016


    【解决方案1】:

    您需要使用一点 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
    

    问候,

    【讨论】:

    • 我为 VBA 函数创建了一个模块。然后,我创建了一个引用它的查询。当我尝试运行它时,我收到一条错误消息:表达式中未定义函数'fJoinData'。我试图在我调用的 VBA 中创建一个函数,该函数运行 fJoinData 模块,然后将该函数插入到查询中。每当我这样做时,我都会收到类似的未定义错误。我觉得我缺少在查询中调用此 VBA 脚本的步骤,因为它不允许我这样做。
    • 如果您在标准模块中创建它,那么它运行应该没有问题。您收到的错误意味着无论出于何种原因,Access 都无法“看到”该功能。
    猜你喜欢
    • 1970-01-01
    • 2019-12-24
    • 1970-01-01
    • 2021-01-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多