SQL UDF组按参数问题

时间:2010-04-26 21:51:44

标签: sql

我在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>

为什么会出现这种情况?仅供参考,我知道我可以删除该功能并组合成一个电话但我希望尽可能保持该功能。

1 个答案:

答案 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()