根据特定字段对现有查询中的值进行求和/分组 - Access2013

时间:2016-08-30 12:48:36

标签: sql ms-access group-by

现在我想知道如何根据Access 2013中的现有查询轻松检索某些特定值,检索到的信息将用于报告中。

我有一个查询,可以检索一个人在特定日期,项目和公司工作时所做的所有时间(1家公司有2家内部公司)。现有查询将这些字段分组。

结果集返回以下格式:

enter image description here

我想要实现的是在特定日期范围内1个特定项目编号上的1个人总小时数。 例如,我想要在项目1000的日期27-8和29-8之间按人员x计算的总工时(公司不重要)。结果如下: 项目编号:1000,日期范围:27-8 / 29-8,人:x,工时:6。

有没有办法实现这个目标?也许在报告本身中结合功能,或者也可以做到这一点过滤和求和'只在查询中?我尝试了几种不同的分组方式,总结等等,但我现在已经被困了。

现有查询如下所示:

SELECT bookings.projectnumber, 
       bookings.personid, 
       persons.personname, 
       bookings.date, 
       bookings.madehours, 
       projects.projectcompany 
FROM   (bookings 
        LEFT JOIN projects ON projects.projectnumber = bookings.projectnumber) 
       LEFT JOIN persons ON persons.personid = bookings.personid 
GROUP  BY bookings.personid, 
          bookings.date, 
          bookings.projectnumber, 
          projects.projectcompany, 
          persons.personname, 
          bookings.madehours   

编辑添加:

返回的结果将显示在报告中,其中数据按人员分组。在发布报告时,只会将日期范围作为参数给出。 因此,对于上面的示例(日期范围27-8 / 29-8),它应该在报告中如下:

-----Person x------
Project: 1000   Made Hours: 6
Project: 2000   Made Hours: 4

-----Person y------
Project: 1000   Made Hours: 4
Project: 3000   Made Hours: 9

2 个答案:

答案 0 :(得分:1)

如果您的最终目标只是显示结果,那么您只需在Access中生成报告即可。 Access 2010并进一步提供本机工具,以便对查询结果进行排序和分组。

所以如果你想要这个结果:

-----Person x------
Project: 1000   Made Hours: 6
Project: 2000   Made Hours: 4

-----Person y------
Project: 1000   Made Hours: 4
Project: 3000   Made Hours: 9

然后创建链接到查询的报告。在Details部分添加Project NumberBooked hours,然后在顶部菜单中选择工具Group and sort,在By Person上创建一个组,并在其中添加字段控制器小组标题。

要过滤日期范围内的报告,您所要做的就是将用于日期的控件作为条件链接。只需使用WHERE OnDate BETWEEN [startDateControlName] AND [endDateControlName]

即可

答案 1 :(得分:0)

SELECT Bookings.ProjectNumber, [From], [To], Bookings.PersonID, Persons.PersonName, sum(Bookings.MadeHours) as Hours
FROM (Bookings LEFT JOIN Projects ON Projects.ProjectNumber = Bookings.ProjectNumber) LEFT JOIN Persons ON Persons.PersonID = Bookings.PersonID
GROUP BY [From], [To], Bookings.PersonID, Bookings.ProjectNumber, Persons.PersonName
WHERE Booking.Date>=[From] and Booking.Date<=[To]

这使用日期范围的参数,如有必要,您可以为人员和项目添加其他参数。