I am trying to take a table and in Microsoft 2016 Access and use SQL to unnest a single column into multiple rows instead. It is comma separated.
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;
I tried adding Unnest and keep getting errors, maybe I am missing something.
This BOGO_Sale.promo_parent_skus
is the only column I am trying to unnest into rows.
An example of the table is:
Here is an example of what I want my SQL query to turn the data into:
The data from my source system comes this way (long story) so I just need to convert it so I can do other analysis and work on it.
The version of Microsoft Access I am using is Office 365 ProPlus Access 2016 32-bit.
Advertisement
Answer
unnest
does not exist in MS Access SQL.
To accomplish this in MS Access, you’ll likely need to use the VBA split function to convert the content of your promo_parent_skus
field into an array, and build an output table containing the results.
Something like:
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
The above will generate a new table called BOGO_Output
.