首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Microsoft 2016 SQL Unnest Array

Microsoft 2016 SQL Unnest Array
EN

Stack Overflow用户
提问于 2020-02-05 22:29:46
回答 1查看 285关注 0票数 0

我试图获取一个表,并在Microsoft2016Access中使用SQL将单个列卸载为多个行。是逗号分隔的。

代码语言:javascript
复制
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版本是Office365 ProPlus Access 2016 32位。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-02-05 22:53:10

unnest不存在于MS访问SQL中。

要在MS Access中实现这一点,您可能需要使用VBA 拆分函数将promo_parent_skus字段的内容转换为数组,并构建包含结果的输出表。

类似于:

代码语言:javascript
复制
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的新表。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60085054

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档