SQL查询动态传递列名

时间:2016-11-30 04:12:36

标签: sql-server

这是我的查询我想动态设置列名,是否可以通过查询

select  
    branch,
    sum(case when months = 'JUL' then  [Parts Revenue Budget] end) as [JUL]
from 
    #final 
group by 
    branch

这样的事情:

@Col as varchar(10);

select  
    branch,
    sum(case when months = 'JUL' then  [@Col] end) as [JUL]
from 
    #final 
group by 
    branch

我收到以下错误消息

  

警告:聚合或其他SET操作消除了空值。

     

Msg 207,Level 16,State 3,Procedure CRM_FRN_PL_BR_MN,215行   列名@Col

无效

2 个答案:

答案 0 :(得分:2)

您要做的是 动态SQL 。大多数DBMS都支持它(你没有说明你正在使用哪一个)。

通常,该过程是 PREPARE 一个以字符串形式传递的语句,如:

SER @Col_Name = 'Col_15' ;
SET @MySTTMNT = CONCAT('SELECT '           ,
                        @Col_Name     , ' ',
                       'FROM MyTable '     ,
                       'WHERE ID = '       ,
                       @MyVariable
                      ) ;

然后将此字符串传递给 Prepare 语句,然后执行。

检查您的DBMS文档以获取动态SQL

答案 1 :(得分:2)

declare @col varchar(10);
declare @sql nvarchar(max);

set @col = 'some_field';
set @sql =  'select ' + @col + ' from #final';

exec sp_executesql @sql;