Sql server 2012 总和查询,日期之间,按员工分组

Sql server 2012 总和查询,日期之间,按员工分组,sql-server-2012,sum,aggregate,Sql Server 2012,Sum,Aggregate,我有4个表格,结构如下: SELECT Project.Name AS ProjectName, Task.Name AS TaskName, Employee.Name AS EmployeeName, SUM(Note.WorkDuration) FROM Note INNER JOIN Employee ON Note.ID_Employe

我有4个表格,结构如下:

SELECT  Project.Name AS ProjectName,
        Task.Name AS TaskName,
        Employee.Name AS EmployeeName,
        SUM(Note.WorkDuration)
        FROM 
        Note 
        INNER JOIN
        Employee 
        ON
        Note.ID_Employee = Employee.ID
        INNER JOIN
        Task
        ON
        Task.ID = Note.ID_Task
        INNER JOIN
        Project
        ON
        Task.ID_Project = Project.ID
        WHERE 
        Note.WorkDate BETWEEN '01/05/2015' AND '08/05/2015'
        GROUP BY
        Task.Name, Project.Name, Employee.Name
        ORDER BY
        Employee.Name
        ASC

更详细地说,项目由一组任务组成。员工可以向数据库中添加一个或多个注释,指定在任何给定日期用于该任务的时间量

我想找出每个员工在两个日期之间完成给定任务的总时间。我的第一次尝试如下:

SELECT  Project.Name AS ProjectName,
        Task.Name AS TaskName,
        Employee.Name AS EmployeeName,
        SUM(Note.WorkDuration)
        FROM 
        Note 
        INNER JOIN
        Employee 
        ON
        Note.ID_Employee = Employee.ID
        INNER JOIN
        Task
        ON
        Task.ID = Note.ID_Task
        INNER JOIN
        Project
        ON
        Task.ID_Project = Project.ID
        WHERE 
        Note.WorkDate BETWEEN '01/05/2015' AND '08/05/2015'
        GROUP BY
        Task.Name, Project.Name, Employee.Name
        ORDER BY
        Employee.Name
        ASC
但是,这在填充的数据库中给出了错误的值。有人能帮我理解怎么做吗

其思想是以某种方式将此查询写入Excel表,项目/任务沿Y,员工姓名沿X,每个单元格包含完成任务的总时间

更新:如果我将BETWEEN子句更改为:

Note.[Date] BETWEEN '20150501' AND '20150508'

它似乎工作正常。所以我有一个日期格式问题。

“因此,我开始为您这样做,并在选择记录时发现WHERE-BETWEEN子句工作不正常。我如上所述设定了日期,我也在那里得到了三月的记录。我是否对日期格式做了一些错误,以致于它正在以某种方式进行转换罗宾逊18分钟前”

这取决于您来自何处以及日期格式的默认设置;我猜您不是美国人(因为您似乎在'01/05/2015'中输入了月的前一天),但我打赌您的服务器格式设置为美国标准(月/日/年)。请参阅


最安全的做法是使用通用标准,就像您在第二次尝试中使用的那样:yyyymmdd(甚至更好:yyyy-mm-dd)。

“因此,我开始为您这样做,并在选择记录时发现WHERE-BETWEEN子句工作不正常。我如上所述设定了日期,我也在那里得到了三月的记录。我是否对日期格式做了一些错误,以致于它正在以某种方式进行转换罗宾逊18分钟前”

这取决于您来自何处以及日期格式的默认设置;我猜您不是美国人(因为您似乎在'01/05/2015'中输入了月的前一天),但我打赌您的服务器格式设置为美国标准(月/日/年)。请参阅


最安全的做法是使用通用标准,就像您在第二次尝试中使用的那样:yyyymmdd(甚至更好:yyyy-mm-dd)。

“因此,我开始为您这样做,并在选择记录时发现WHERE-BETWEEN子句工作不正常。我如上所述设定了日期,我也在那里得到了三月的记录。我是否对日期格式做了一些错误,以致于它正在以某种方式进行转换罗宾逊18分钟前”

这取决于您来自何处以及日期格式的默认设置;我猜您不是美国人(因为您似乎在'01/05/2015'中输入了月的前一天),但我打赌您的服务器格式设置为美国标准(月/日/年)。请参阅


最安全的做法是使用通用标准,就像您在第二次尝试中使用的那样:yyyymmdd(甚至更好:yyyy-mm-dd)。

“因此,我开始为您这样做,并在选择记录时发现WHERE-BETWEEN子句工作不正常。我如上所述设定了日期,我也在那里得到了三月的记录。我是否对日期格式做了一些错误,以致于它正在以某种方式进行转换罗宾逊18分钟前”

这取决于您来自何处以及日期格式的默认设置;我猜您不是美国人(因为您似乎在'01/05/2015'中输入了月的前一天),但我打赌您的服务器格式设置为美国标准(月/日/年)。请参阅



最安全的做法是使用通用标准,就像您在第二次尝试中所做的那样:yyyymmdd(或者更好:yyyy-mm-dd).

您的日期是包含的还是独占的?日期是包含的。您能在问题中粘贴一些匿名数据吗?您的查询看起来还可以。因此我开始为您这样做,并在选择记录时发现WHERE-BEVER子句工作不正确。我如上所述设置了日期,并且我也从中获得了3月份的记录。是吗对日期格式做了一些错误处理,导致它以某种方式被转换?字段[日期]DateTime2顺便说一句。你的日期是包含的还是独占的?日期是包含的。你能在问题中粘贴一些匿名数据吗?你的查询看起来还可以。所以我开始为你做这件事,当我选择记录时发现WHERE-BEVER子句工作不正常。我如上所述设置了日期,并且我从中获得了3月份的记录也是。我是否对日期格式做了一些错误,导致它以某种方式被转换?字段[日期]DateTime2顺便说一句。你的日期是包含的还是独占的?日期是包含的。你能在问题中粘贴一些匿名数据吗?你的查询看起来还可以。所以我开始为你做这件事,当我选择记录时发现WHERE-BEVER子句工作不正常。我如上所述设置了日期,并且我从中获得了3月份的记录也是。我是否对日期格式做了一些错误,导致它以某种方式被转换?字段[日期]DateTime2顺便说一句。你的日期是包含的还是独占的?日期是包含的。你能在问题中粘贴一些匿名数据吗?你的查询看起来还可以。所以我开始为你做这件事,当我选择记录时发现WHERE-BEVER子句工作不正常。我如上所述设置了日期,并且我从中获得了3月份的记录也是。我是否对日期格式做了一些错误,导致它以某种方式被转换?字段[日期]是DateTime2顺便说一句。我想补充你的答案。+1谢谢你斯图尔特和纳特拉斯给我指出了正确的方向。我想补充你的答案。+1谢谢你斯图尔特和纳特拉斯给我指出了正确的方向。我想补充你的答案。+1谢谢斯图尔特和纳特拉斯,谢谢你给我的建议告诉我正确的方向。我会为你的