2016-10-07 5 views
0

Здесь я использовал функцию SUM в столбце TRx1. У меня TRx2,3,4, .. 53 Столбцы в таблице. Я хочу показать все столбцы, используя цикл.Используйте @variable в имени COLUMN в SQL SERVER 2012

DECLARE @flag INT; 
SET @flag = 1; 

WHILE @flag <= 2 
BEGIN 

    select TOP 5 sd.OutletBPID, md.Product, SUM(TRx1) 
    from sdata as sd, md, oa 
    where sd.PSetID = md.PsetID 
    group by sd.OutletBPID, md.Product; 

SET @flag = @flag + 1; 
END; 

Следующий код я сделал, но он показывает сообщение об ошибке: "Неверное имя столбца"

DECLARE @flag INT; 
SET @flag = 1; 

WHILE @flag <= 2 
BEGIN 

    select TOP 5 sd.OutletBPID, md.Product, SUM([email protected]) 
    from sdata as sd, md, oa 
    where sd.PSetID = md.PsetID 
    group by sd.OutletBPID, md.Product; 

SET @flag = @flag + 1; 
END; 
+0

Любой причину для 'plsql' тега? –

+0

@WilliamRobertson Loop подходит под тегом plsql? – Japs

+0

Не совсем. Нажмите тег для определения. –

ответ

2

Вам нужны динамический SQL

DECLARE @flag INT, 
     @sql varchar(8000)='' 
SET @flag = 1; 


WHILE @flag <= 2 
BEGIN 

SET @sql = 'select TOP 5 sd.OutletBPID, md.Product, SUM(TRx'+cast(@flag as varchar(20))+') 
      from sdata as sd, md, oa 
      where sd.PSetID = md.PsetID 
      group by sd.OutletBPID, md.Product' 

    exec (@sql) 

SET @flag = @flag + 1; 
END; 
+0

Спасибо, он работает. exec ('select TOP 5 sd.OutletBPID, md.Product, SUM (TRx' + @ flag + ') как TotalTRx' + @ flag + ' from sdata as sd, md, oa где sd.PSetID = md.PsetID group by sd.OutletBPID, md.Product ') – Japs

+0

Невозможно выполнить CAST() внутри EXEC(). –

+0

@AaronBertrand - да пропустил это. Обновлен мой ответ –