So habe ich diesen Code und es funktioniert nicht:Warum werden meine Aggregate nicht gruppiert?
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
Der Fehler sagt „Spalte‚Subquery.ManHrs‘in der Auswahlliste ungültig, da sie nicht in einer Aggregatfunktion oder die GROUP enthalten sind BY-Klausel "
Also wenn ich ManHRS zur GROUP BY-Klausel hinzufügen, wird der Code ausgeführt, aber nichts ist gruppiert. Nicht sicher, was ich falsch mache
Hier ist ein Screenshot des Codes ausgeführt wird, indem die ManHrs an die GROUP BY-Klausel hinzufügen, wenn es einfacher ist, zu lesen:
EDIT: Okay, so ich es dachte, mit Hilfe von Rominus aus, hier ist der Code wie beabsichtigt:
Fügen Sie Ihre Aggregation zu Ihrer Gruppierung hinzu –
Wenn ich das mache, bekomme ich alle Datensätze, wie Sie auf dem Screenshot sehen können. Jeder Mitarbeiter sollte nur 5 Datensätze haben, für die Wochen 28-32 –
Nein, ich meine buchstäblich fügen Sie den Aggregatausdruck der Gruppe anstelle von nur die Spalte. Wenn das nicht die Ergebnisse bringt, gruppieren Sie vielleicht in der Unterabfrage? Mit der CONVERT- und DATEDIFF-Klausel in der WHERE-Klausel wird wahrscheinlich auch die Leistung beeinträchtigt. Wenn Sie das vermeiden können, würde ich es empfehlen. –