Sql 列“Pay_records.ActualTime”在选择列表中无效,因为它未包含在聚合函数或GROUP BY子句中

Sql 列“Pay_records.ActualTime”在选择列表中无效,因为它未包含在聚合函数或GROUP BY子句中,sql,sql-server,Sql,Sql Server,我正在尝试获取每个TimeCode的TimeCodeTotal。SQL Server不喜欢我当前的设置,希望我将PR.实际时间添加到组中 这不是一个解决方案,因为通过将PR.ActualTime添加到组中会将结果更改为不正确的值; 我只想根据下面查询中提供的值进行分组 有没有另一种不用overbypartition子句而按时间码分隔的方法 SELECT YEAR(PR.date) AS TimeYear ,SUBSTRING(DATENAME(MONTH,DATEADD(MONTH,MO

我正在尝试获取每个TimeCode的TimeCodeTotal。SQL Server不喜欢我当前的设置,希望我将PR.实际时间添加到组中

这不是一个解决方案,因为通过将PR.ActualTime添加到组中会将结果更改为不正确的值; 我只想根据下面查询中提供的值进行分组

有没有另一种不用overbypartition子句而按时间码分隔的方法

SELECT YEAR(PR.date) AS TimeYear
    ,SUBSTRING(DATENAME(MONTH,DATEADD(MONTH,MONTH(PR.Date),0)- 1),1,3) AS TimeMonth
    ,TC.TimeCode
    ,SUM(PR.ActualTime) OVER (PARTITION BY TC.TimeCode) AS TimeCodeTotal
    ,SUM(PR.ActualTime) AS MonthTotal
    FROM Pay_records PR
INNER JOIN Employee E ON E.employee_no = PR.employee_no
INNER JOIN Dept_Names D ON D.Dept = E.department
INNER JOIN DepartmentTimeCategory DTC ON DTC.Dept = D.Dept
INNER JOIN TimeCategory TMC ON TMC.ID = DTC.TimeCategoryID
INNER JOIN TimeCode TC ON TC.TimeCodeID = TMC.TimeCodeID
WHERE PR.DATE BETWEEN '01/01/2015' AND '02/17/16'
AND D.Dept IN ('02Z103')
AND E.Billable IN (1,0)
GROUP BY  YEAR(PR.date), MONTH(PR.date), TC.TimeCode
ORDER BY YEAR(PR.date), MONTH(PR.date)

我认为一个简单的解决方法是从查询中删除SUMPR.ActualTime OVER PARTITION BY TC.TimeCode AS TimeCode total,将整个内容包装在一个CTE中,然后从CTE中选择所有内容并添加一个SUMTimeCodeTotal


我认为一个简单的解决方法是从查询中删除SUMPR.ActualTime OVER PARTITION BY TC.TimeCode AS TimeCode total,将整个内容包装在一个CTE中,然后从CTE中选择所有内容并添加一个SUMTimeCodeTotal


能否添加一些示例数据和预期输出?我想我知道如何解决这个问题,但是有一些数据需要确认会有帮助。@JoeRandel现有的答案解决了这个问题吗?你能添加一些样本数据和预期的输出吗?我想我知道如何解决这个问题,但是有一些数据需要确认会有帮助。@JoeRandel现有答案解决了这个问题吗?我刚刚提交了一个编辑请求,将您的评论内容添加到实际答案中。希望同行评审会接受它:因为SQL缺少格式,所以我应用了我将使用的缩进/布局:我希望这样可以。如果你愿意,也许你现在可以进一步编辑它。我刚刚提交了一个编辑请求,将你的评论内容添加到实际答案中。希望同行评审会接受它:因为SQL缺少格式,所以我应用了我将使用的缩进/布局:我希望这样可以。如果你愿意,也许你现在可以进一步编辑它。
;WITH CTE AS ( 
    SELECT      YEAR(PR.date) AS TimeYear 
                ,SUBSTRING(DATENAME(MONTH,DATEADD(MONTH,MONTH(PR.Date),0)- 1),1,3) AS TimeMonth 
                ,TC.TimeCode 
                ,SUM(PR.ActualTime) AS TimeCodeSubTotal 

    FROM        Pay_records             PR 
    INNER JOIN  Employee                E       ON E.employee_no = PR.employee_no 
    INNER JOIN  Dept_Names              D       ON D.Dept = E.department 
    INNER JOIN  DepartmentTimeCategory  DTC     ON DTC.Dept = D.Dept 
    INNER JOIN  TimeCategory            TMC     ON TMC.ID = DTC.TimeCategoryID 
    INNER JOIN  TimeCode                TC      ON TC.TimeCodeID = TMC.TimeCodeID

    WHERE       PR.DATE BETWEEN '01/01/2015' AND '02/17/16' 
    AND         D.Dept IN ('02Z103') 
    AND         E.Billable IN (1,0) 

    GROUP BY    YEAR(PR.date)
                ,MONTH(PR.date)
                ,TC.TimeCode 
    ) 
SELECT      TimeYear
            , TimeMonth
            , TimeCode
            , TimeCodeSubTotal 
            , Sum(TimeCodeSubTotal) 

FROM        CTE

GROUP BY    TimeYear
            , TimeMonth
            , TimeCode
            , TimeCodeSubTotal 

ORDER BY    YEAR(PR.date)
            , MONTH(PR.date)