【问题标题】:Combine cells in access separated by comma合并访问中的单元格,以逗号分隔
【发布时间】:2021-11-25 03:39:50
【问题描述】:

我是访问和编码的新手。 我有一张包含大量数据的表格。我想通过运行查询或 VBA 在 Access 中指定一些数据。我想要的是组合基于列的数据和用逗号分隔的每个数据。我正在粘贴下面的表格示例:

输入表

输出数据 enter image description here

我尝试使用 COMMON,但没有成功。请帮忙。

【问题讨论】:

  • 您不仅要合并字段,还要合并记录。组合字段是简单的串联,组合记录需要 VBA(Google Allen Browne ConcatRelated)。如果数据结构被规范化,这将更简单。 “没有运气”是什么意思 - 错误消息,错误结果,没有任何反应?我希望在 Access 中无法识别 COMMON。问题太宽泛了。尝试编写代码,当您遇到特定问题时,发布问题。
  • 既然每列只允许一种类型的产品,为什么列名产品和数据不是真/假?无论如何,数据没有标准化,这使数据操作变得复杂。 UNION 查询可以将数据重新排列为标准化结构,并且该数据集可以作为进一步操作的源。
  • 我尝试使用 COMMON,它给出了一个无法识别的错误。我知道这使数据复杂化了很多。我能够使用 VBA 在 excel 中合并数据,但希望在访问中实现相同的目标。在 excel 中,我必须使用单个产品列和 vlookup 来获得结果,但需要更好的方法来存档相同的结果。其中我只是运行查询来实现它。我完全同意这是复杂的数据,需要一些帮助。
  • 不知道是否更好。引用的 Allen Browne 程序(以及其他类似程序)在处理大型数据集时执行缓慢。混合使用 UNION 查询会使情况变得更糟。无论数据结构如何,VBA 都是获得所需输出的唯一方法。
  • 我确实尝试了 Allen brown 方法,但没有成功。我得到的错误是 Concatrelated 的未定义函数。可能是我需要的结果更复杂。

标签: sql ms-access concatenation


【解决方案1】:

使用非规范化数据结构的 Allen Browne ConcatRelated 函数(经常被引用,以 Access: ConcatRelated works on a table, but not on a query 开头):

SELECT Data.LocationID, 
"Paste: " & ConcatRelated("CustomerID","Data","LocationID=" & [LocationID] & " AND NOT Product1 IS NULL")
& "; " & "Chips: " & ConcatRelated("CustomerID","Data","LocationID=" & [LocationID] & " AND NOT Product2 IS NULL")
& "; " & "Oil: " & ConcatRelated("CustomerID","Data","LocationID=" & [LocationID] & " AND NOT Product3 IS NULL")
& "; " & "Pulses: " & ConcatRelated("CustomerID","Data","LocationID=" & [LocationID] & " AND NOT Product4 IS NULL")
& "; " & "Salt: " & ConcatRelated("CustomerID","Data","LocationID=" & [LocationID] & " AND NOT Product5 IS NULL")
& "; " & "Sugar: " & ConcatRelated("CustomerID","Data","LocationID=" & [LocationID] & " AND NOT Product6 IS NULL")
AS PS
FROM Data
GROUP BY Data.LocationID;

数据结构可以用 UNION 查询规范化。

SELECT LocationID, CustomerID, Product1 AS Product FROM Data WHERE NOT Product1 IS NULL
UNION SELECT LocationID, CustomerID, Product2 FROM Data WHERE NOT Product2 IS NULL
UNION SELECT LocationID, CustomerID, Product3 FROM Data WHERE NOT Product3 IS NULL
UNION SELECT LocationID, CustomerID, Product4 FROM Data WHERE NOT Product4 IS NULL
UNION SELECT LocationID, CustomerID, Product5 FROM Data WHERE NOT Product5 IS NULL
UNION SELECT LocationID, CustomerID, Product6 FROM Data WHERE NOT Product6 IS NULL;

然后产生所需的输出将涉及另外两个查询,每个查询都调用 ConcatRelated 函数。

查询1:

SELECT LocationID, Product & ": " & 
ConcatRelated("CustomerID","unionData","LocationID=" & [LocationID] & " AND Product='" & [Product] & "'")
AS PS
FROM unionData
GROUP BY LocationID, Product;

查询2:

SELECT LocationID, 
ConcatRelated("PS","Query1","LocationID=" & [LocationID], "", "; ")
AS ProductSold
FROM Query1
GROUP BY LocationID;

规范化数据的优点是无论涉及多少产品,都不必修改最后两个查询,并且查询中不经常引用 ConcatRelated 函数。对于非规范化数据,如果添加更多产品列,则必须修改查询以再次为每个列调用函数。规范化表结构,可以省去UNION查询。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-12-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多