2009-09-14 69 views
1

我有一个表在MS Access这样的记录:如何合并MS访问中的行?

ID field2 field3 field4 field5 
1 345  asr 
2    ase  567 788 
3 456  ghy 
4    jki  568 899 
5 235  yui 
6    hju  456 456 

我要合并它得到像这样的表:

ID  field2 field3 field4 field5 
1   345 asrase  567 788 
3   456 ghyjki  568 899 
5   235 yuihju  456 456 

这是可能的疑问?

+1

我们可以掀起一些东西。首先,我们需要同意规定两个(或更多?)行将对结果表中的同一行产生贡献的规则。 1)是属于同一个表,由直接在最后一个带有field2值的记录之后缺少field2值_and_ ID而建立。 2)如果我们有多个field4或field5的值(例如,如果我们总共有3行输入两个field4值)? – mjv 2009-09-14 06:20:37

+0

截至目前为止,我们可以安全地假设字段4和5只有一个值 – tksy 2009-09-14 06:32:04

回答

1

假设行继续像例子中,这个查询会做:

select a.id, 
    a.field2, 
    a.field3 + Iif(IsNull(b.field3),'',b.field3), 
    b.field4, 
    b.field5 
from table1 a 
left join table1 b on b.id = a.id + 1 
where a.field2 is not null 

它加入表本身,寻找下一行。它将两行结合起来以产生所需的结果。

+0

假设我上面给出的表是来自更大表的查询的结果,其中记录不一定是这样。将这作为子查询是否可以在原始表中进行更新。 – tksy 2009-09-14 07:40:34

+0

您可以将此查询用作“创建新表”查询。 – Andomar 2009-09-14 08:49:36

+0

还有一个疑问是我们可以直接添加像这样a.field3 + b.field3 – tksy 2009-09-14 08:59:16

0

我想你可能可以。从您的示例行判断,您希望每个“偶数”行和“奇数”行以明确定义的方式合并在一起。

有了这样的问题,如果你不知道方式,我会开始使用查询编辑器来玩。例如,您可以创建一个查询来计算第1/2个实际ID的伪ID吗?我认为你可以,而且这会让你得到一个共同的ID来把两个字段联系起来。

但还有其他的方式来关联这两个领域。您可以合并表格与自身,选择第一个版本为非NULL字段4(或5),第二个版本的ID与第一个-1的ID相同。

如果您使用我首先提出的1/2 ID ID方法,则容易的事情是创建1个查询来获得“偶数”,而另一个查询得到“奇数”行。然后你简单地将这两个查询合并到第三个查询中。

一旦你有了一个解决方案,你可以试试它,并尝试其他的东西。

我会先在查询编辑器中播放,然后在完成后查看SQL。 PS:我确信我可以为你编码,但你有什么乐趣呢? ;-)

0

我对Andomar采用了稍微不同的方法,并使用mod函数返回偶数行。

SELECT a.id, a.field2, a.field3 + IIF(b.field3 IS NULL,'', b.field3), 
     b.field4, b.field5 
    FROM Table1 AS a 
     INNER JOIN Table1 AS b 
      ON a.ID = b.ID + 1 
WHERE Table1_1.ID MOD 2 = 0; 
+0

在这两种情况下,我得到一个错误,用于函数Isnull(b.field3,'')的参数的错误数量。我不确定这里的wromg是什么。 Isnull可以在Ms Access中使用吗? – tksy 2009-09-14 08:16:25

+0

啊对,Access ISNULL只有1个参数。试试这个:Iif(IsNull(b.field3),'',b.field3) – Andomar 2009-09-14 08:51:35

0

我不认为任何的答案在这里是稳健的,因为它取决于ID字段是连续的,而且即使是连续,它是在值下一个连续的记录。

我想知道更多关于Field3中的数据,即它是否有意义。

+0

第一个为我工作。字段3中的数据基本上是对产品的描述 – tksy 2009-09-15 08:06:51