【问题标题】:I'm getting error cannot perform an aggregate function on an expression containing an aggregate or a subquery我收到错误无法对包含聚合或子查询的表达式执行聚合函数
【发布时间】:2016-08-02 20:44:23
【问题描述】:
SELECT sum(sum(DATEDIFF(DAY,LeaveBreakup.StartDate,LeaveBreakup.EndDate)+1)) AS totalNoOfDays,
       LeaveApplication.Id,
       LeaveBreakup.StartDate,
       LeaveBreakup.EndDate,
       LeaveApplication.ReasonForLeave,
       LeaveApplication.ProcessorComment,
       Team.Name,
       LeaveTypeDetail.Name
FROM LeaveApplication
INNER JOIN Employee ON LeaveApplication.Employee=Employee.Id
INNER JOIN Team ON Employee.Team=Team.Id
INNER JOIN LeaveBreakup ON LeaveApplication.Id=LeaveBreakup.LeaveApplication
INNER JOIN LeaveTypeDetail ON LeaveBreakup.LeaveType=LeaveTypeDetail.LeaveType
WHERE Employee.Team=5
  AND LeaveStatus!=0
  AND LeaveBreakup.StartDate BETWEEN '01-01-2016' AND '01-31-2016'
  AND LeaveBreakup.WhichHalf=0
GROUP BY LeaveApplication.Id,
         LeaveBreakup.StartDate,
         LeaveBreakup.EndDate,
         LeaveApplication.ReasonForLeave,
         LeaveApplication.ProcessorComment,
         Team.Name,
         LeaveTypeDetail.Name
ORDER BY LeaveBreakup.StartDate

【问题讨论】:

  • 为什么要sumsum?这就是错误。
  • 你不需要开头的那两个 SUM SUM(blah)+1
  • 我只想要该列 'totalNoOfDays' 的总和
  • 提前谢谢 :)
  • 查看 WITH ROLLUP 或使用子查询求和 totalNoOfDays

标签: sql-server aggregate-functions


【解决方案1】:

试试这样的。

SELECT sum(totalNoOfDays) as total,
a.Id,
       a.StartDate,
       a.EndDate,
       a.ReasonForLeave,
       a.ProcessorComment,
       a.Name,
       a.Name
from
select
(
select sum(DATEDIFF(DAY,LeaveBreakup.StartDate,LeaveBreakup.EndDate)+1) AS totalNoOfDays,
       LeaveApplication.Id,
       LeaveBreakup.StartDate,
       LeaveBreakup.EndDate,
       LeaveApplication.ReasonForLeave,
       LeaveApplication.ProcessorComment,
       Team.Name,
       LeaveTypeDetail.Name
FROM LeaveApplication
INNER JOIN Employee ON LeaveApplication.Employee=Employee.Id
INNER JOIN Team ON Employee.Team=Team.Id
INNER JOIN LeaveBreakup ON LeaveApplication.Id=LeaveBreakup.LeaveApplication
INNER JOIN LeaveTypeDetail ON LeaveBreakup.LeaveType=LeaveTypeDetail.LeaveType
WHERE Employee.Team=5
  AND LeaveStatus!=0
  AND LeaveBreakup.StartDate BETWEEN '01-01-2016' AND '01-31-2016'
  AND LeaveBreakup.WhichHalf=0
GROUP BY LeaveApplication.Id,
         LeaveBreakup.StartDate,
         LeaveBreakup.EndDate,
         LeaveApplication.ReasonForLeave,
         LeaveApplication.ProcessorComment,
         Team.Name,
         LeaveTypeDetail.Name
)a
group by
a.Id,
a.StartDate,
a.EndDate,
a.ReasonForLeave,
a.ProcessorComment,
a.Name,
a.Name
ORDER BY a.StartDate

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-08-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多