我在SQL中遇到了group by子句的一些问题。我有以下基本功能:
CREATE FUNCTION dbo.fn_GetWinsYear (@Year int)
RETURNS int
AS
BEGIN
declare @W int
select @W = count(1)
from tblGames
where WinLossForfeit = 'W' and datepart(yyyy,Date) = @Year
return @W
END
我正在尝试运行以下基本查询:
select dbo.fn_GetWinsYear(datepart(yyyy,date))
from tblGames
group by datepart(yyyy,date)
但是,我遇到以下错误消息:列'tblGames.Date'在选择列表中无效,因为它不包含在聚合函数或GROUP BY子句中。 / p>
为什么会出现这种情况?仅供参考,我知道我可以删除该功能并组合成一个电话但我希望尽可能保持该功能。
答案 0 :(得分:1)
我认为你应该像这样调用你的函数。
select dbo.fn_GetWinsYear(datepart(yyyy,getdate()))
OR
select dbo.fn_GetWinsYear('2010')
基本上你只需要将一年时间传递给你的函数,函数就会返回当年的胜利数量。
如果你不知道这一年,你的功能可能看起来像这样......
CREATE FUNCTION dbo.fn_GetWinsYear ()
RETURNS @tblResults TABLE
( W INT, Y INT )
AS
BEGIN
INSERT @tblResults
SELECT count(1), datepart(yyyy,[Date])
FROM tblGames
WHERE WinLossForfeit = 'W'
GROUP BY datepart(yyyy,[Date])
RETURN
END
SELECT * FROM dbo.fn_GetWinsYear()