Sql ms access总和日期不同,但按季度分组

Sql ms access总和日期不同,但按季度分组,sql,ms-access,Sql,Ms Access,需要以下查询的帮助吗 此时显示按年度季度分组的工作时间的用户列表。 我还想总结一下工作日数——问题是可以有不止一个工作日 行,因此onsitedate上的总和不正确。 我不能按天分组,因为结果需要按年度季度显示 sql 如果需要更多信息和TQ,请告诉我 更新 如前所述,我应该在sitedate行输入中使用COUNT SELECT username, DatePart ('q', [onsitedate]) AS [qtr], SUM(onsitehours), **COUNT(

需要以下查询的帮助吗

此时显示按年度季度分组的工作时间的用户列表。 我还想总结一下工作日数——问题是可以有不止一个工作日 行,因此onsitedate上的总和不正确。 我不能按天分组,因为结果需要按年度季度显示

sql

如果需要更多信息和TQ,请告诉我

更新

如前所述,我应该在sitedate行输入中使用COUNT

SELECT 
  username,
  DatePart ('q', [onsitedate]) AS [qtr],
  SUM(onsitehours),
  **COUNT(onsitedate)**
FROM
但是,如果同一日期存在两条记录,则我希望计数为1

示例数据如下:

username        onsitedate         onsitehours
-----------------------------------------------
bob             01/09/2013         10
bob             01/09/2013         2
fred            01/09/2013         12
jim             01/09/2013         10
jim             02/09/2013         5
所需rs

username    qtr    onsitedate_count         onsitehours_sum
--------------------------------------------------------- 
bob         3      1                        12
fred        3      1                        12
jim         3      2                        15
如您所见,尽管2013年9月1日有两项记录记录显示bob的现场日期仍然为1 因为他们是同一天

也试着按照这样的方式,把日子排在第一位,但没有快乐

GROUP BY tech_name, DatePart('d',[on_site_date]), DatePart('q',[on_site_date]) 

只是不要在现场约会。如果我正确理解你的问题

SELECT 
 a.username,
 DatePart ('q', a.[onsitedate]) AS [qtr],
 COUNT(b.[onsitedate]) onsitedate_count,
 SUM(a.onsitehours)
FROM clocktable a
  join (SELECT username, [onsitedate])
        FROM clocktable GROUP BY username,[onsitedate]) b
    on a.username = b.username
WHERE a.onsitedate BETWEEN #2013-01-01# AND #2013-12-31#
GROUP BY a.username, DatePart('q',a.[onsitedate]), b.onsitedate_count
ORDER BY a.username, DatePart('q',a.[onsitedate]) 

首先创建一个查询,对用户名和onsitedate的每个组合的onsitehours求和

选择 用户名, 日期部分'q',[onsitedate]作为[qtr], 在现场, SUMonsitehours作为SUMonsitehours 从…起 时钟表 其中,2013年1月1日至2013年12月31日期间的现场日期 按用户名、DatePart'q'、[onsitedate]、onsidedate分组; 然后将其用作子查询,对用户名和qtr的每个组合计算日期和小时数

选择 sub.username, sub.qtr, Countsub.onsitedate作为onsitedate\u计数, Sumsub.SumOfonsitehours作为现场小时数的总和 从…起 选择 用户名, 日期部分'q',[onsitedate]作为[qtr], 在现场, SUMonsitehours作为SUMonsitehours 从…起 时钟表 其中,2013年1月1日至2013年12月31日期间的现场日期 按用户名、日期部分'q'、[onsitedate]、onsitedate分组 作为子 按sub.username分组,sub.qtr 按sub.username、sub.qtr订购;
使用时钟表样本数据,该查询将在Access 2007中返回您请求的输出。

您是否尝试使用COUNTonsitedate而不是SUMonsitedate?您好,COUNT是我应该使用的,但是这会产生错误的结果-如果同一天存在两条记录,则总数将为2,我希望计数为1-更新了问题HI-如果我不计算SiteDate,那么我不会计算工作天数ps-示例应该是计数而不是总和道歉使用子查询。我已经编辑了查询。见上文。希望如此。如果您投入精力修复该查询中的语法错误,您将发现bob在SiteDate_count=2时返回。感谢@HansUp指出这一点。我想我不应该急着说太多:不客气,但最新版本仍然无法在Access中运行。以下版本在Access 2007中运行时没有语法错误,但在逻辑上仍然存在缺陷,因为它对用户名bob计算了两次相同的日期2013年9月1日。。。
SELECT 
 a.username,
 DatePart ('q', a.[onsitedate]) AS [qtr],
 COUNT(b.[onsitedate]) onsitedate_count,
 SUM(a.onsitehours)
FROM clocktable a
  join (SELECT username, [onsitedate])
        FROM clocktable GROUP BY username,[onsitedate]) b
    on a.username = b.username
WHERE a.onsitedate BETWEEN #2013-01-01# AND #2013-12-31#
GROUP BY a.username, DatePart('q',a.[onsitedate]), b.onsitedate_count
ORDER BY a.username, DatePart('q',a.[onsitedate])