Dupe:每个GROUP BY表达式必须包含至少一个不是外部引用的列

时间:2011-10-19 02:34:51

标签: sql tsql sql-server-2008 stored-procedures

当我尝试创建以下存储过程时,我收到以下错误。

存储过程:

CREATE PROCEDURE spReport

    @rLevel nvarchar(50),
    @aSelected nvarchar(64),
    @wType nvarchar(20),
    @dSelected nvarchar(20),
    @StartDate smalldatetime,
    @EndDate smalldatetime

AS
BEGIN


    SET NOCOUNT ON;

    declare @total float 

    if (@dSelected = null)
    begin
        select @total = sum(total) from bs where @rLevel =  CHAR(39)+ @aSelected+CHAR(39) 
                 and wtype = '' + @wType + '' and bdate between CHAR(39)+@StartDate+CHAR(39) and CHAR(39)+@EndDate+CHAR(39) 

        select @rLevel, bdays, str(sum(total*100/@total ),38,2) as percentages, sum(total)as total1 
        from bs 
        where @rLevel= CHAR(39)+@aSelected+CHAR(39) and wtype = CHAR(39)+@wType+CHAR(39) and 
        bdate between CHAR(39)+@StartDate+CHAR(39) and  CHAR(39)+@EndDate+CHAR(39)
        group by @rLevel, bdays 
        order by  
        CASE @rLevel
            WHEN 'r' THEN r
            WHEN 'D' THEN D 
            WHEN 'S' THEN S             
        END
        ,bdays

    end
END

错误: 每个GROUP BY表达式必须至少包含一个不是外部引用的列。

我不明白我做错了什么。

除此之外,我在使用单引号时遇到问题,我使用它的方式是否正确?

1 个答案:

答案 0 :(得分:3)

您不需要按常量表达式进行分组,@rLevel就是一个。

所以,当你删除它时......你会遇到另一个问题。这是你的ORDER BY条款。它包含对既未聚合也未包含在GROUP BY中的列的引用。 (当您的陈述中有GROUP BY子句时,不能按任意列排序。)