如何计算 Access 查询中 table 中的特定值

How to count specific value in a table in Access query

我在查询列上使用 Dcount 从另一个 table 中获取多少 1。我在 Dcount 的参数中给出了当前查询列值,如下所示。

DCount("AttnStatus","InstructorAttendance","AttnStatus=1 And AttnDate>=#" & [FD] & "# And AttnDate<=#" & [LD] & "# And IUID=" & [InstructorUtilization].[IUID])

Sql:

SELECT qryAttendance_Crosstab.IUID, PL.PL, SubPL.SubPL, qryAttendance_Crosstab.MN, 
Instructor.InstructorName, InstructorRole.InstructorRole, Country.Country, 
qryAttendance_Crosstab.[1], qryAttendance_Crosstab.[2], qryAttendance_Crosstab.[3], 
qryAttendance_Crosstab.[4], qryAttendance_Crosstab.[5], qryAttendance_Crosstab.[6], 
qryAttendance_Crosstab.[7], qryAttendance_Crosstab.[8], qryAttendance_Crosstab.[9], 
qryAttendance_Crosstab.[10], qryAttendance_Crosstab.[11], qryAttendance_Crosstab.[12], 
qryAttendance_Crosstab.[13], qryAttendance_Crosstab.[14], qryAttendance_Crosstab.[15], 
qryAttendance_Crosstab.[16], qryAttendance_Crosstab.[17], qryAttendance_Crosstab.[18], 
qryAttendance_Crosstab.[19], qryAttendance_Crosstab.[20], qryAttendance_Crosstab.[21], 
qryAttendance_Crosstab.[22], qryAttendance_Crosstab.[23], qryAttendance_Crosstab.[24], 
qryAttendance_Crosstab.[25], qryAttendance_Crosstab.[26], qryAttendance_Crosstab.[27], 
qryAttendance_Crosstab.[28], qryAttendance_Crosstab.[29], qryAttendance_Crosstab.[30], 
qryAttendance_Crosstab.[31], qryAttendance_Crosstab.[Total Days], 
IIf(IsNumeric(Nz([Total Days],0)/(DateDiff("d",[MN],DateSerial(Year([MN]),Month([MN])+1,1)-1)-([Days]-1))),Nz([Total Days],0)/(DateDiff("d",[MN],DateSerial(Year([MN]),Month([MN])+1,1)-1)-([Days]-1)),0) AS Availability, 
DateSerial(Year([MN]),Month([MN]),1) AS FD, 
DateSerial(Year([MN]),Month([MN])+1,1)-1 AS LD, 
DCount("AttnStatus","InstructorAttendance","AttnStatus=1 And AttnDate>=#" & [FD] & "# And AttnDate<=#" & [LD] & "# And IUID=" & [InstructorUtilization].[IUID]) AS Training
FROM InstructorRole INNER JOIN 
((Country INNER JOIN Instructor ON Country.CountryID = Instructor.Country) INNER JOIN ((SubPL INNER JOIN (PL INNER JOIN (qryAttendance_Crosstab RIGHT JOIN InstructorUtilization ON qryAttendance_Crosstab.IUID = InstructorUtilization.IUID) ON PL.PLID = InstructorUtilization.PL) ON SubPL.SubPLID = InstructorUtilization.SubPL) LEFT JOIN WeekendAndHolidays ON qryAttendance_Crosstab.MN = WeekendAndHolidays.MonthDay) ON Instructor.InstructorID = InstructorUtilization.InstructorID) ON InstructorRole.IRID = Instructor.InstructorRole
ORDER BY PL.PL, SubPL.SubPL, qryAttendance_Crosstab.MN, 
Instructor.InstructorName;

下面给出了我尝试使用 ‌Dcount 从中检索信息的 table 的结构。

讲师出勤率Table:

返回第一行的正确值。但问题是,下一行的计数值逐渐增加,不给对return.

我实际上通过什么方式得到正确的结果?

考虑:

SELECT qryAttendance_Crosstab.*, PL.PL, SubPL.SubPL, InstructorName, InstructorRole, Country.Country, 
DCount("*", "InstructorAttendance", "IUID=" & [IUID] & " AND AttnStatus=1 
       AND Format([AttnDate],'yyyymm')=" & Format([Month],"yyyymm")) AS Training
...

或者代替 DCount(),构建聚合查询。

SELECT IUID, Format([AttnDate],"yyyymm") AS AttYYYYMM, Count(*) AS CountStatus
FROM InstructorAttendance
WHERE AttnStatus=1
GROUP BY IUID, Format([AttnDate],"yyyymm");

计算交叉表查询中的 YYYYMM 字段。在 IUID 和 YYYYMM 字段上使用复合 link 将聚合查询加入交叉表查询。

以国际格式显示的出席日期。注意与国际日期相关的问题,查看 http://allenbrowne.com/ser-36.html

建议不要为 table 和字段重复名称。例如,Countries 最好作为 table 名称和 Country 作为字段名称,最好不要使用 IUID 多 table 秒。