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

时间:2015-04-13 19:48:40

标签: ms-access ms-access-2010

我有一个访问表,每个ID都有UniqueId和多个phone Numbers 我可以将这些电话号码分成不同的列吗?有160多个行加上无数电话号码

所有字段均为TEXT字段。

 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 个答案:

答案 0 :(得分:2)

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

  1. 使用DCount功能将“Phone1”,“Phone2”等分配给该字段。
  2. 使用Pivot Query
  3. 要使用此方法,您需要确保您的表中包含唯一标识符。 (即如果还没有“自动编号”字段,则可以添加“自动编号”字段)

    以下是第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()”命令将文本转换为Long Integer的查询。

    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;
    

    这将为您提供如下输出:

    data before pivot

    现在,在第2步中,row_id字段可以旋转到列中。使用数据透视表向导来协助,或者这里是示例SQL:

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

    这是输出:

    Final pivoted results

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