我有这个标量函数:
ALTER FUNCTION [dbo].[Custom_SumKayakoMonthProfit]
(@ClientId int, @KKId int,
@StartDate SmallDateTime, @EndDate SmallDatetime,
@Month int)
RETURNS INT
AS
BEGIN
DECLARE @Total INT
SELECT
@Total = ((CAST(SUM(WorkedTimeInMinutes) AS FLOAT) / 60) * KayakoValue)
FROM
[VDBSERVER2012\SQLEXPRESS2014].PlaterITDB.dbo.KayakoTimeEntries
INNER JOIN
ClientContract ON ClientId = @ClientId
AND Workdate BETWEEN ClientContract.StartDt AND ClientContract.EndDt
WHERE
OrganizationID = @KKId
AND WorkDate BETWEEN @StartDate AND @EndDate
AND MONTH(WorkDate) = @Month
RETURN @Total
END
每当我尝试执行它以在存储过程中使用它时,我都会收到此错误。
列'ClientContract.KayakoValue'在选择列表中无效,因为它不包含在聚合函数或GROUP BY子句中。
我无法弄清楚如何解决它。
答案 0 :(得分:3)
你对这条消息不了解什么?您有一个没有GROUP BY
的聚合查询。因此,所有列必须是聚合函数的参数。
我怀疑你打算:
SELECT @Total = CAST(SUM(WorkedTimeInMinutes * KayakoValue) AS FLOAT)/60
FROM [VDBSERVER2012\SQLEXPRESS2014].PlaterITDB.dbo.KayakoTimeEntries kte INNER JOIN
ClientContract cc
ON ClientId = @ClientId AND
Workdate BETWEEN cc.StartDt AND cc.EndDt
WHERE OrganizationID = @KKId AND
WorkDate BETWEEN @StartDate AND @EndDate AND MONTH(WorkDate) = @Month
请注意,您应该学会使用表别名并限定所有列名。这是编写可读和可维护代码的好习惯。
答案 1 :(得分:0)
你应该在总和函数中使用'KayakoValue',如sum,count ,. 。 。或者在最后的小组中。
get 'welcome', to: 'users#welcome', defaults: { id: 1 }
OR
SELECT @Total = ((CAST(SUM(WorkedTimeInMinutes) AS FLOAT)/60) * KayakoValue)
FROM [VDBSERVER2012\SQLEXPRESS2014].PlaterITDB.dbo.KayakoTimeEntries
INNER JOIN ClientContract ON ClientId = @ClientId AND Workdate BETWEEN ClientContract.StartDt AND ClientContract.EndDt
WHERE OrganizationID = @KKId AND WorkDate BETWEEN @StartDate AND @EndDate AND MONTH(WorkDate) = @Month
group by KayakoValue