SQL Select 在 Access 中按工作日进行不同的分组

SQL Select DISTINCT GROUP BY Weekday in Access

我正在尝试计算每个工作日 table 中用户 ID 的不同数量(例如,工作日 1 = 星期一有 545 个用户 ID,工作日 2 = 星期二有 120 个用户 ID,等等)。我在 Access Visual Basic 中执行此操作,但语法应该对 SQL 通用。这是我的 VB 代码:

 sSQL = " SELECT Weekday(" & tablename & ".[DATE]) AS WEEKDAY, Count(DISTINCT " & tablename & ".[UserID]) AS User_COUNT"
 sSQL = sSQL & " FROM " & tablename
 sSQL = sSQL & " GROUP BY Weekday(" & tablename & ".[DATE])"
 qdf.SQL = sSQL

简单的 SQL 语法应该如下所示(根据评论和测试编辑):

     SELECT Weekday(tbl.[Date]) AS WEEKDAY, Count(DISTINCT tbl.[UserID]) AS User_COUNT
     FROM tbl
     GROUP BY Weekday(tbl.[Date])

..而 [Date] 是 tbl 中格式为 Datetime 的字段,[UserID] 是格式为 Long(有重复)的字段。

当我尝试 运行 命令时,它告诉我 "Missing Operator in Query-Syntax.." 这是我的 VB 代码的问题还是 SQL 语法错误?

MS Access 数据库引擎不支持 COUNT(DISTINCT ...)

要解决此问题,请参阅此线程:SQL : how can i count distinct record in MS ACCESS 作者建议使用子查询解决问题:

SELECT
    user_id
  , COUNT(*) AS count_distinct_clients
FROM
    ( SELECT DISTINCT
          user_id, 
          client_id
      FROM tbl_sActivity
    ) AS tmp
GROUP BY
    user_id ;

根据需要更改查询代码。

[编辑]

SELECT
    wday, COUNT(UserId) AS count_distinct_users
FROM
    ( SELECT DISTINCT WEEKDAY([Date]) AS wday, UserId
      FROM tblName
    ) AS tmp
GROUP BY
    wday;