2017-09-13 142 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)