2017-09-13 115 views
0

我正在研究一些非常简单的SQL查询,即同一查询的双胞胎,更改字段。这里的一个例子:按列名称分组的SQL变量

select 
field1 
,sum(field2) 
from table 
group by field1 

而我必须这样做的三个领域,总是总场field2。这意味着例如:

select 
field3 
,sum(field2) 
from table 
group by field3 

依此类推。我感到无聊得很快,所以我决定学习一些新东西,应用一个变量,并且只改变一次分组字段的名称。

declare @field varchar (10); 
-- use field1, field3, field4 
    set @field = 'field1'; 

select 
@field 
,sum(field2) 
from table 
group by @field 

,结果是这个错误:

Each GROUP BY expression must include at least one column that is not an external reference (roughly translated by Google Translator)

好吧,我决定到底要面对的群体,所以我删除它:

declare @field varchar (10); 
-- use field1, field3, field4 
    set @field = 'field1'; 

select 
@field 
from table 

结果是没有名字的列,并且在行上有许多field1字作为行的数字,全部等于常量,类似于:

no name 
field1 
field1 
field1 
.... 
field1 

代替

field1 
a 
b 
c 
... 
z 

所以问题有两个:

  • 如何将一个变量添加为查询列名?
  • 如何在一个组中管理它?

预先感谢您的时间!

+1

SQL Server不支持宏替换,则需要使用动态SQL这个 –

+1

[申报查询字符串变量(HTTPS的可能重复:// stackoverflow.com/questions/3833352/declare-variable-for-query-string) – Tanner

回答

4

这可以动态地完成:

declare @sql as nvarchar(max) 
declare @field1 varchar (10); 
declare @field2 varchar (10); 
set @field1 = 'field1'; 
set @field2 = 'field2'; 

set @sql = 'select [' + @field1 + '], sum([' + @field2 + ']) from table group by [' + @field1 + ']' 
exec(@sql)