在访问中合并同一表中的多个记录

时间:2009-12-22 10:57:37

标签: ms-access ms-access-2007

您好我正在处理一些不友好的导入文件,导入为:

timestamp  position        name
001            2            Jon
001            3            Bob
001            1            Ann
001            4            Mike
002            1            Joe
002            2            Sue
003            1            Jeff
004            5            James
004            1            Andy
004            2            Beth
004            4            Mitch
004            3            Chris

并且想要创建一个如此显示的新表:

timestamp  position1    position2    position3    position4     position5
001           Ann          Jon          Bob          Mike
002           Joe          Sue
003           Jeff
004           Andy         Beth         Chris        Mitch        James

通过浏览此论坛,我最接近解决方案的是:

SELECT pos1.timestamp, pos1.name AS position1, pos2.name AS position2
FROM table1 AS pos1 INNER JOIN table1 AS pos2 
ON pos1.timestamp = pos2.timestamp
WHERE (((pos1.position)=1) AND ((pos2.position)=2))

我无法弄清楚如何将其扩展到我的规格,非常感谢任何帮助。

2 个答案:

答案 0 :(得分:1)

尝试这样的事情

TRANSFORM First(Table.[name]) AS FirstOfname
SELECT Table.[timestamp]
FROM [Table]
GROUP BY Table.[timestamp]
PIVOT Table.[position];

我是使用MS Access Cross Tab Query Wizard创建的。

另外看看

What is a CrossTab Query?

一些更好的言论。

  • 单击“创建”选项卡。
  • 单击“查询向导”。
  • 选择第二个选项(交叉表查询 向导)并点击确定。
  • 选择输入表格,然后选择 点击下一步。
  • 选择时间戳,然后单击箭头 (单)指向从左到右, 并点击下一步。
  • 选择位置然后点击下一步。
  • 名称将是剩下的字段, 选择第一个(默认为计数),然后选择 点击下一步。
  • 点击完。

它应该已经保存了一个名为Table_Crosstab(或类似的东西)的查询。 右键单击此选项并选择设计视图。 在视图按钮上,选择Sql View。

您应该看到与

类似的内容
TRANSFORM First(Table.name) AS FirstOfname
SELECT Table.timestamp, First(Table.name) AS [Total Of name]
FROM [Table]
GROUP BY Table.timestamp
PIVOT Table.position;

从第二行删除

, First(Table.name) AS [Total Of name]

这样你最终得到了

TRANSFORM First(Table.name) AS FirstOfname
SELECT Table.timestamp
FROM [Table]
GROUP BY Table.timestamp
PIVOT Table.position;

那应该是它。保存,你准备好了。

答案 1 :(得分:1)

你的新桌子设计不好。当传入数据中有第六个和第七个人时会发生什么?当您需要提取特定人员的所有数据时,也很难处理,因为您需要查询五列。