s_t*_*s_t 1 sql-server variables group-by
我正在处理一些非常简单的 SQL 查询,它们是同一个查询的双胞胎,改变了一个字段。这里有一个例子:
select
field1
,sum(field2)
from table
group by field1
Run Code Online (Sandbox Code Playgroud)
而且我必须对三个字段执行此操作,总是对 field2 求和。这意味着例如:
select
field3
,sum(field2)
from table
group by field3
Run Code Online (Sandbox Code Playgroud)
等等。我很快就厌烦了,所以我决定学习一些新东西,应用一个变量,并且只更改一次分组字段的名称。
declare @field varchar (10);
-- use field1, field3, field4
set @field = 'field1';
select
@field
,sum(field2)
from table
group by @field
Run Code Online (Sandbox Code Playgroud)
结果是这个错误:
每个 GROUP BY 表达式必须包含至少一列不是外部引用(由谷歌翻译粗略翻译)
好吧,我最终决定面对小组,所以我将其删除:
declare @field varchar (10);
-- use field1, field3, field4
set @field = 'field1';
select
@field
from table
Run Code Online (Sandbox Code Playgroud)
结果是一个没有名字的列,在行上有很多field1字作为行号,都等于常量,比如:
no name
field1
field1
field1
....
field1
Run Code Online (Sandbox Code Playgroud)
代替
field1
a
b
c
...
z
Run Code Online (Sandbox Code Playgroud)
所以问题有两个:
提前感谢您的时间!
这可以动态完成:
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)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5886 次 |
| 最近记录: |