所以我有這樣的代碼,它不工作:爲什麼我的聚合組不會?
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來殺死性能。如果你能避免這一點,我會推薦它。 –