所以我有这样的代码,它不工作:为什么我的聚合组不会?
SET DATEFIRST 1
SELECT
WeekNumber-1 AS [WeekNumber],
EmplName,
ROUND(SUM(ManHrs), 2) AS [ManHrs],
ROUND((SUM(ManHrs) OVER(PARTITION BY EmplName)/((CONVERT(FLOAT, GETDATE())-
CONVERT(FLOAT, DATEADD(dd,
((DATEDIFF(dd,'17530101',GETDATE())/7)*7)-29,'17530101')))/7)), 2) AS [Avg
Weekly Man Hrs]
FROM
(
SELECT
DATEPART(wk, TicketDate) AS WeekNumber,
e.EmplName,
t.WorkCntr,
t.ManHrs
FROM TimeTicketDet t JOIN EmplCode e ON t.EmplCode = e.Emplcode
WHERE CONVERT(DATE, TicketDate) > DATEADD(dd,
((DATEDIFF(dd,'17530101',GETDATE())/7)*7)-29,'17530101')
) AS [Subquery]
GROUP BY WeekNumber, EmplName
ORDER BY 2, 1
错误说,因为它不是在聚合函数或GROUP包含“列Subquery.ManHrs'在选择列表中无效BY子句“
因此,当我将ManHrs添加到GROUP BY子句时,代码将运行,但没有任何分组。不知道我做错了
下面是通过添加ManHrs到GROUP BY子句,如果它更易于阅读运行代码的截图:
编辑:好的,所以我想通了与Rominus的帮助下,这里是按预期工作代码:
将您的聚合添加到您的分组 –
如果我这样做,我会得到所有的记录,你可以在屏幕截图中看到。每个员工应该只有5个记录,数周28-32 –
不,我的意思是将字面值加到组中,而不是仅仅将列添加到组中。如果这不会得到结果,可能在子查询中进行分组?此外,您可能正在使用WHERE子句中的CONVERT和DATEDIFF来杀死性能。如果你能避免这一点,我会推荐它。 –