如何计算 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 秒。
我在查询列上使用 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 秒。