按列名称分组的SQL变量
问题描述:
我正在研究一些非常简单的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
所以问题有两个:
- 如何将一个变量添加为查询列名?
- 如何在一个组中管理它?
预先感谢您的时间!
答
这可以动态地完成:
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)
SQL Server不支持宏替换,则需要使用动态SQL这个 –
[申报查询字符串变量(HTTPS的可能重复:// *.com/questions/3833352/declare-variable-for-query-string) – Tanner