vba - Microsoft Access 2016 使用 SQL 汇总和合并表
问题描述
我有一个表格,我需要对其进行格式化以用于手动上传过程。该表有数千行,因此我需要使用可重复的过程来快速将提供给我的数据的方式修复为所需的数据。我对今天数据传给我的方式的控制能力为零。但是,由于系统限制,我必须对其进行格式化才能使用它。我当前的表是 4 列,我需要将其输出为 3 列。我必须按字段名称分组:“品牌”和“促销”。字段名称:“skus” 我需要通过单个“品牌”和“促销”组合将它们合并为一个连续的字符串。
给定品牌存在重复的“促销”,因为它们是在产品级别创建的。但是,他们进入的系统需要是“品牌”、“促销”、“skus”。
不确定我是否需要使用 VBA 在 Access 中执行某些操作。或者我可以在两个不同的查询中执行此操作。
解决方案
您将需要使用一些 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
问候,
推荐阅读
- django - Django - 检查是否点击了表单提交按钮?
- r - 如何通过特定前缀将多个数据框转换为列表
- openscenegraph - OSG 轮廓仅出现在几何图形的一侧
- c - 从c中的特定接口发送数据包
- r - 使用 POSIXct 为 left_join() 格式化两个不同的数据帧
- angular - Angular 7:core.js:12501 错误错误:未捕获(承诺):错误:无法匹配任何路由。网址段:
- c# - WaitForSeconds 在“自定义”协程中不起作用
- docker - 为什么服务名称更改后未在 docker-compose ps 中列出?
- android - 间歇性 FirebaseFirestoreException:PERMISSION_DENIED:缺少权限或权限不足
- html - line-height:导致行前和行后不被分割(用于良好的排版)