【问题标题】:SQL Select DISTINCT GROUP BY Weekday in AccessSQL 在 Access 中选择 DISTINCT GROUP BY Weekday
【发布时间】:2015-05-23 13:35:29
【问题描述】:

我正在尝试计算每个工作日表中不同的用户 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 语法应该如下所示(根据 cmets & test 编辑):

     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(有重复项)的字段。

当我尝试运行命令时,它告诉我“查询语法中缺少运算符..” 这是我的 VB 代码的问题还是 SQL 语法错误?

【问题讨论】:

  • 我认为您用作列名的Date与access数据库的preserve关键字有冲突。请尝试将Date列更改为其他名称?
  • 不应该是Weekday(tableName.[Date]) 而不是Weekday(Date)?日期是保留字,必须用[] 括号括起来。
  • 嗨,阿莫,嗨 Maciej!我都试过了,它仍然给我同样的错误..

标签: sql database ms-access syntax vba


【解决方案1】:

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;

【讨论】:

  • Maciej,这对我来说很有意义。我似乎无法将其转化为我的需求: sSQL = "SELECT " & tablename & ".[UserID], COUNT(*) AS USER_COUNT" sSQL = sSQL & "FROM ( SELECT DISTINCT Weekday(" & tablename & ".[DATE]), " & tablename & ".[UserID]) FROM tablename) AS tmp" sSQL = sSQL & " GROUP BY UserID" ...这个语法有效,但它给了我每个工作日的条目数, 并且没有区别(即,一些 UserID 应该在每个有数据的日期都被计算在内)。
  • 太棒了!这非常有效。我真的很想知道你们怎么能这么快地掌握一些抽象代码。我确实明白我在做什么,但是如果我想太多,我的头会很痛。非常感谢 Maciej!
猜你喜欢
  • 1970-01-01
  • 2013-06-19
  • 2010-09-30
  • 1970-01-01
  • 1970-01-01
  • 2016-03-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多