当我尝试创建以下存储过程时,我收到以下错误。
存储过程:
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表达式必须至少包含一个不是外部引用的列。
我不明白我做错了什么。
除此之外,我在使用单引号时遇到问题,我使用它的方式是否正确?
答案 0 :(得分:3)
您不需要按常量表达式进行分组,@rLevel
就是一个。
所以,当你删除它时......你会遇到另一个问题。这是你的ORDER BY
条款。它包含对既未聚合也未包含在GROUP BY
中的列的引用。 (当您的陈述中有GROUP BY
子句时,不能按任意列排序。)