将 sql 从 SELECT 查询转换为 UPDATE 查询时出现问题。最终目标是在一个单元格内获得一个串联列表,其中一个表中的一条记录在另一个表中具有 1+ 行且具有不同的值。常见的例子:
用户 | 职位代码 |
---|---|
用户A | 10 |
用户A | 100 |
用户A | 200 |
用户B | 100 |
用户C | 200 |
用户C | 250 |
变成:
用户 | 职位代码 |
---|---|
用户A | 10、100、200 |
用户B | 100 |
用户C | 200、250 |
(以“,”作为分隔符)
我在 SELECT 查询上成功使用了 Allen Browne 的 ConcatRelated,如下
SELECT DOETrainingList.SUI, dbo_vw_EPIC_PRD_EMP_TEMPLATE.USER_ID
, GetList("LNK_TEMPLT_ID", "dbo_vw_EPIC_PRD_EMP_TEMPLATE", "USER_ID = """ & [dbo_vw_EPIC_PRD_EMP_TEMPLATE].[USER_ID] & """","",Chr(13) & Chr(10)) AS TemplateIds
FROM DOETrainingList INNER JOIN dbo_vw_EPIC_PRD_EMP_TEMPLATE ON DOETrainingList.EMPDOT1 = dbo_vw_EPIC_PRD_EMP_TEMPLATE.USER_ID
GROUP BY DOETrainingList.SUI, dbo_vw_EPIC_PRD_EMP_TEMPLATE.USER_ID;
(注意我将函数更改为“GetList”) 这将返回一个数据表,其中包含表 DOETrainingList 中的每一行和一个新的列 TemplateID,该列 TemplateID 填充模板的串联列表,其中 dbo_vw_EPIC_PRD_EMP_TEMPLATE.USER_ID 在同一个表中与自身匹配。这里一切看起来都不错。
但我似乎无法让它在更新查询上工作。
这是我所拥有的:
UPDATE DOETrainingList INNER JOIN dbo_vw_EPIC_PRD_EMP_TEMPLATE ON DOETrainingList.EMPDOT1 = dbo_vw_EPIC_PRD_EMP_TEMPLATE.USER_ID
SET DOETrainingList.EMP1110 = GetList("LNK_TEMPLT_ID","dbo_vw_EPIC_PRD_EMP_TEMPLATE","DOETrainingList.EMPDOT1 = """ & dbo_vw_EPIC_PRD_EMP_TEMPLATE.USER_ID & """","",Chr(13) & Chr(10));
运行此查询时出现错误“操作必须使用可更新查询”
在我看来,函数标准参数中的字段向后。另外,如果您想使用 VBA 函数保存 dbo_vw_EPIC_PRD_EMP_TEMPLATE 中的聚合数据,请不要在 UPDATE 操作中 JOIN 到此表。
UPDATE DOETrainingList SET EMP1110 =
GetList("LNK_TEMPLT_ID", "dbo_vw_EPIC_PRD_EMP_TEMPLATE", "USER_ID='" & EMPDOT1 & "'", "", Chr(13) & Chr(10));
如果ID字段是数字类型,请勿使用撇号分隔符。