将行合并到单个记录中

时间:2014-02-20 11:42:35

标签: ms-access

外部编写的数据库有一些我希望在2个表中匹配的数据:

表A:

  • ID1(号码)
  • ID2(号码)
  • Fld1(文字)

表B:

  • ID1(号码)
  • 类型(编号)
  • Fld2(文字)
  • Fld3(文字)

加入的唯一常见字段是ID1,但是,我真的希望所有数据都与ID2记录匹配。

加入ID1上的表格给出了以下结果:

| ID1 | ID2 | Type |   Fld1    |   Fld2    |   Fld3    |
--------------------------------------------------------
|  1  |  1  |  1   |   Data1   |   Data1   |           |
|  2  |  1  |  2   |           |           |   Data1   |
|  3  |  2  |  1   |   Data1   |   Data1   |           |
|  4  |  2  |  2   |           |           |   Data1   |

我需要的是一个查询结果:

| ID1 | ID2 | Type |   Fld1    |   Fld2    |   Fld3    |
--------------------------------------------------------
|  ?  |  1  |  ?   |   Data1   |   Data1   |   Data1   |
|  ?  |  2  |  ?   |   Data1   |   Data1   |   Data1   |

我把“?”对于ID1和Type字段,因为我不确定它们会合并到哪个结果(最终我不会对这两个字段感到困惑,我真的只想要ID2和3“Fld~”字段)。

实现这个目的的方法是什么?

接受回答后的其他说明:

正如Remou所建议的那样,在文本字段上使用聚合函数MAX并按照我想要使用的ID字段进行分组。但是,我在最初的插图中没有提到我也在过滤几个领域。

即使没有为查询选择这些字段,它们也需要在查询的设计视图中将其“total”函数设置为“Where”,以确保它们成为SQL WHERE子句的一部分。默认情况下,设计视图会将它们设置为“分组依据”,这将它们放入HAVING子句(不是我想要的)。

Totals in Design View

这是我到达的完整SQL,它给了我所需要的东西:

SELECT A.Learner_Id, 
       Max(B.AddLine1) AS Address1, 
       Max(B.AddLine2) AS Address2, 
       Max(B.AddLine3) AS Address3, 
       Max(B.AddLine4) AS Address4, 
       Max(A.PostCode) AS AddPostCode
FROM LearnerContact As A LEFT JOIN PostAdd As B ON A.LearnerContact_Id = B.LearnerContact_Id
WHERE (((A.LocType)=1 Or (A.LocType)=2) AND ((A.ContType)=2))
GROUP BY A.Learner_Id;

1 个答案:

答案 0 :(得分:1)

Max可能适合:

SELECT t.ID2, 
       Max(t.Fld1) AS MaxOfFld1, 
       Max(t.Fld2) AS MaxOfFld2, 
       Max(x.Fld3) AS MaxOfFld3
FROM aTable t 
INNER JOIN bTable x
ON t.ID1 = x.ID1
GROUP BY t.ID2;