0

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

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

数据:

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;

在此处输入图像描述

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

导师考勤表: 在此处输入图像描述

在第一行返回正确的值。但问题是,下一行的计数值逐渐增加,没有给出正确的返回值。

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

4

1 回答 1

1

考虑:

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 字段上的复合链接将聚合查询加入交叉表查询。

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

建议不要重复表和字段的名称。例如,Country最好作为表名,Country作为字段名,最好不要在多个表中使用IUID 。

于 2021-03-27T23:35:30.967 回答