2011-05-11 35 views
0

我有一个MS Access查询,显示官员ID与测试成绩和他们采取每种类型的年度认证测试的日期。但是,我试图按官员ID和每个官员的单行列出他们每次进行的测试类型的日期,以便我可以在他们将要再次进行相同类型的测试时进行标记。军官不会在同一天进行所有类型的测试,并且通常不会在其他军官同一天进行。举例来说,一名军官可能有资格在一天内进行白天拍摄和夜间拍摄,然后4个月后有资格参加步枪拍摄。我想显示每个官员的所有日期,不管分数如何,都输入分数。MS Access - 如何显示日期人员参加技能测试

我的查询的字段有:

OfficerID, TestDate, DayScore, NightScore, RifleScore 

我试图让它得到这样的结果:

JohnDoe123, 03/15/2010, 03/15/2010, 10/04/2010 

FJacobs123, 02/01/2010, 04/27/2010, 11/11/2010 

我基本上取代比分资格的日期。它似乎应该很简单,但我卡住了。请帮忙。

谢谢。

回答

0

您需要一个连接值的函数。见Microsoft Access condense multiple lines in a table

您的查询,然后将类似:

Select OfficerId 
    , GetList("Select Format(CertificateDate, 'm/d/yyyy') 
        From OfficerCertificates As O1 
        Where O1.OfficerID = " & Officers.ID & " 
        Order By CertificateDate") As CertificateDates 
From Officers 
0

另一种方式来解决这个问题是建立一个报告表,你去,你可以填补行,而不是功能来构建飞行结果。

对我来说,选择归结为您运行查询的频率以及数据更改的频率。

如果您每月只运行一次或某事,或者数据经常更改,请使用特殊查询。

如果您经常显示结果,并且数据不会经常更改,您可以真正从报告表中获益。

0

也许不是刚好你想要什么,但看看CrossTab查询。这可以将单个列中的所有值拉到一起,并将它们显示为与其相关联的记录一致的各自的字段。你最终得到的是一个名称和日期矩阵,如果在该日期进行了测试,那么你的查询可以在该日期字段中输入“Y”。这也会垂直对齐在同一天进行测试的官员。

Officer Name | 02/01/2010 | 03/15/2010 | 03/15/2010 | 04/27/2010 | 10/04/2010 | 11/11/2010 
JohnDoe123 |   |  Y  |  Y  |   |  Y  | 
FJacobs123 |  Y  |   |   |  Y  |   |  Y