每个GROUP BY表达式必须至少包含

时间:2018-11-28 17:06:33

标签: sql sql-server tsql dynamic-sql

Declare @region as nvarchar(30)

Set @region = 'Region'

select SUM([Units_Sold]) 
from Table1 
group by @region, Year

RegionYear是列,我必须遍历多个列并替换@region的值

但显示为

  

每个GROUP BY表达式必须至少包含一列,而不是外部引用。

我们将不胜感激

1 个答案:

答案 0 :(得分:1)

不能使用参数替换标识符(列名,函数名等)。因此,您要插入的值将被解释为一个常量,即字符串'Region',而不是列引用。 SQL Server检测何时任何按组分组的键都是常量,并返回错误。

不幸的是,您需要使用动态SQL 修改查询字符串:

declare @region as nvarchar(30);
set @region = 'Region';

declare @sql nvarchar(max);

set @sql = N'
select SUM([Units_Sold])
from Table1
group by @region, Year
';

set @sql = replace(@sql, '@region', @region);

exec sp_executesql @sql;