我有一个MS Access查询,显示官员的ID与考试分数和他们参加每种类型的年度认证考试的日期。但是,我正在尝试按军官ID分组,并在单行中列出每个军官参加的每种考试的日期,以便我可以标记他们何时需要再次参加相同类型的考试。这些军官不会在同一天参加所有类型的考试,而且通常不会与其他军官在同一天进行考试。例如,一名军官可能有资格在某一天进行日间射击和夜间射击,然后在4个月后获得步枪射击资格。我想要显示每个军官的所有日期,其中输入了分数,而不考虑分数。
我的查询中的字段是:
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
我基本上是用资格赛日期代替分数。这看起来应该很简单,但是我被卡住了。请帮帮忙。
谢谢。
发布于 2011-05-12 03:45:55
您需要一个函数来连接这些值。请参阅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
发布于 2011-05-12 03:49:23
解决此问题的另一种方法是构建一个报告表,您可以在执行过程中填充这些行,而不是使用函数动态构建结果。
对我来说,选择归根结底取决于运行查询的频率和数据更改的频率。
如果您每月只运行一次,或者如果数据经常更改,则使用特殊查询。
如果您经常显示结果,并且数据不经常更改,那么您可以从拥有一个报告表中获得真正的好处。
发布于 2011-05-17 03:55:38
也许不完全是您想要的,但是可以研究一下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
https://stackoverflow.com/questions/5969655
复制相似问题