我是 ASP.NET 中使用 C# 的新开发人员。我为其中一家公司开发了一个基于 Web 的应用程序,现在我需要开发一个日志来显示访问该系统的唯一人员的数量。例如,AA 部门的员工 A 和 B 今天访问了该系统。员工 A 在同一天两次访问系统。日志应该显示今天有两名来自 AA 部门的员工访问了系统,而不是三名。
我有以下数据库设计:
Employee Table: Username, Name, DivisionCode (DivisionCode is a foreign key to SapCode)
Divisions Table: SapCode DivisionShortcut
Log Table: ID, Username, DateTimeAccessing
我编写了以下查询,显示了用户名、员工姓名、部门和 DateTimeAccessing:
SELECT dbo.[Log].Username, dbo.employee.Name, dbo.Divisions.DivisionShortcut, dbo.[Log].DateTimeAccessing
FROM dbo.employee INNER JOIN
dbo.[Log] ON dbo.employee.Username = dbo.[Log].Username INNER JOIN
dbo.Divisions ON dbo.employee.DivisionCode = dbo.Divisions.SapCode
查询应显示每天根据部门和日期访问系统的员工数量,例如:
At Nove 21, Division AA = 2
Nove 21, Division BB = 7
Nove 20, Division AA = 12 and so on
那么该怎么做呢?
*更新: * 我现在正在使用以下查询:
SELECT CONVERT(varchar(10), l.DateTimeAccessing, 120) AS Date, d.DivisionShortcut, COUNT(DISTINCT l.Username) AS Cnt
FROM dbo.employee AS e INNER JOIN
dbo.[Log] AS l ON e.Username = l.Username RIGHT OUTER JOIN
dbo.Divisions AS d ON e.DivisionCode = d.SapCode
GROUP BY CONVERT(varchar(10), l.DateTimeAccessing, 120), d.DivisionShortcut
现在的问题是,例如,如果我想查看所有部门的今天或 11 月 10 日的统计信息,日期列将显示该部门在该日期没有员工访问系统的 NULL 值。为什么?以及如何解决?