如何使用数据透视查询汇总基于文本的列

How to roll up text-based columns with a pivot query

我有一个访问权限 table,每个 ID 有一个 UniqueId 和多个 phone Numbers
我可以将那些 phone 数字滚动到单独的列中吗? 有 160 thds 加上无数行 phone #'s

所有字段都是文本字段。

 ID         Phone
  1           502
  1           402
  2           375
  3           502
  4           777
  4           645

我想看到的结果...

 ID         Phone1      Phone2     Phone3
  1          502         402       
  2          375
  3          502
  4          777         645   

这可以通过以下步骤完成:

  1. 使用 DCount 函数将 "Phone1"、"Phone2" 等分配给字段。
  2. 使用 Pivot Query.

要使用这种方法,您需要确保您的 table 中有唯一标识符。 (即,如果还没有,您可以添加 "autonumber" 字段)

这是第 1 步的示例查询

SELECT Table1.UniqueID, Table1.ID, Table1.Phone, 
"Phone" & DCount("Phone","Table1","ID=" & [ID] & " AND UniqueID<=" & [UniqueID]) AS row_id
FROM Table1
ORDER BY Table1.ID, Table1.Phone;

由于您后来提到您的所有字段都是文本字段,这里是一个使用 "CLng()" 命令将文本转换为长整型的查询。

SELECT WrkingFile.ID
     , WrkingFile.IndividualMatchID
     , WrkingFile.Phone
     , "Phone" & DCount("Phone","[WrkingFile]","cLng(IndividualMatchID)=" & CLng([IndividualMatchID]) & " AND cLng(ID)<=" & CLng([ID])) AS row_id
FROM WrkingFile
ORDER BY WrkingFile.IndividualMatchID, WrkingFile.Phone;

这将为您提供如下所示的输出:

现在,在第 2 步中,row_id 字段可以旋转成列。使用 Pivot Table 向导来协助,或者这里是示例 SQL:

TRANSFORM First(Query1.[Phone]) AS FirstOfPhone
SELECT Query1.[ID]
FROM Query1
GROUP BY Query1.[ID]
PIVOT Query1.[row_id];

这是输出:

以上内容摘自 Microsoft Access 社区网站的 post by Roger Carlson