【问题标题】:Microsoft Access 2016 SQL Unnest ArrayMicrosoft Access 2016 SQL 未嵌套数组
【发布时间】:2020-02-06 06:53:10
【问题描述】:

我正在尝试获取一个表并在 Microsoft 2016 Access 中使用 SQL 将单个列取消嵌套到多行中。它是逗号分隔的。

SELECT BOGO_Sale.Summary, BOGO_Sale.issue_key, BOGO_Sale.promo_name, BOGO_Sale.promo_parent_sku_names, BOGO_Sale.promo_parent_skus
FROM BOGO_Sale;

我尝试添加 Unnest 并不断收到错误,也许我遗漏了一些东西。

这个BOGO_Sale.promo_parent_skus 是我试图取消嵌套到行中的唯一列。

表格的一个例子是:

这是我希望我的 SQL 查询将数据转换为的示例:

我的源系统中的数据是这样来的(长话短说),所以我只需要转换它,这样我就可以进行其他分析和处理。

我使用的 Microsoft Access 版本是 Office 365 ProPlus Access 2016 32-bit。

【问题讨论】:

    标签: sql ms-access


    【解决方案1】:

    unnestMS Access SQL 中不存在。

    要在 MS Access 中完成此操作,您可能需要使用 VBA split 函数将 promo_parent_skus 字段的内容转换为数组,并构建包含结果的输出表。

    类似:

    Function ParseBOGO()
        Dim dbs As DAO.Database
        Dim rs1 As DAO.Recordset
        Dim rs2 As DAO.Recordset
        Dim sku
        Dim fld As Field
    
        Set dbs = CurrentDb
        dbs.Execute "select t.* into BOGO_Output from BOGO_Sale t where false"
    
        Set rs1 = dbs.OpenRecordset("bogo_sale")
        Set rs2 = dbs.OpenRecordset("bogo_output")
        If Not rs1.EOF Then
            rs1.MoveFirst
            Do Until rs1.EOF
                For Each sku In Split(rs1!promo_parent_skus, ",")
                    rs2.AddNew
                    For Each fld In rs1.Fields
                        rs2.Fields(fld.Name) = fld.Value
                    Next fld
                    rs2!promo_parent_skus = sku
                    rs2.Update
                Next sku
                rs1.MoveNext
            Loop
        End If
        rs2.Close
        rs1.Close
    End Function
    

    上面将生成一个名为BOGO_Output的新表。

    【讨论】:

    • 完美运行。我以前从未使用过VBA。我现在明白了,感谢它。
    • 另外,我假设如果我需要反转 BOGO 输出文件,我也可以使用 STUFF() 函数将其转换为逗号分隔?有时我们希望在对这个列表进行过滤和分析之后,反过来输入到不同的系统中执行。
    • 不客气 - 我很高兴它有效。几乎任何事情都可以通过足够的代码实现……对于反向过程,您可能需要考虑 Allen Browne 的 ConcatRelated 函数。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-17
    • 2018-06-12
    • 2021-01-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多