标量函数是否不适用于聚合查询

时间:2014-05-28 17:59:38

标签: sql sql-server

我定义了一个用户定义的标量函数,将时间转换为第二个:

Create function [dbo].[TIME_TO_SEC](@inputTime time)
returns INT
As
Begin 
    DECLARE @secDiff INT = datediff(second, '00:00:00', @inputTime)
    return @secDiff;
end 

上面的函数工作正常,但当我尝试在聚合函数内部调用时,请说' SUM'

SELECT emp.EmpId
    ,sum(dbo.TIME_TO_SEC(au.BirthDateTime)) AS EmployeeBirthDay
FROM Employee emp

我得到以下错误:

  

专栏'员工.EmpId'在选择列表中无效,因为它是   不包含在聚合函数或GROUP BY子句中。

P.S。请注意我尝试在上面的用户定义函数中复制MySQL TIME_TO_SEC功能。

2 个答案:

答案 0 :(得分:0)

添加分组依据:

SELECT emp.EmpId
    ,sum(dbo.TIME_TO_SEC(au.BirthDateTime)) AS EmployeeBirthDay
FROM Employee emp
GROUP BY Emp.EmpID

答案 1 :(得分:0)

您需要将EmpId放在Group By子句中:

SELECT emp.EmpId
    ,sum(dbo.TIME_TO_SEC(au.BirthDateTime)) AS EmployeeBirthDay
FROM Employee emp
GROUP BY emp.EmpID