#sql #sql-server #loops
#sql #sql-сервер #циклы
Вопрос:
Здесь я использовал функцию SUM для столбца TRx1. У меня есть TRx2, 3, 4, .. 53 столбца в таблице. Я хочу отобразить все столбцы с помощью цикла.
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(TRx@flag)
from sdata as sd, md, oa
where sd.PSetID = md.PsetID
group by sd.OutletBPID, md.Product;
SET @flag = @flag 1;
END;
Комментарии:
1. Есть ли причина для
plsql
тега?2. Цикл @WilliamRobertson находится под тегом plsql, верно?
3. Не совсем. Щелкните тег для определения.
4. ТЕГ @WilliamRobertson УДАЛЕН.
Ответ №1:
Вам нужен динамический 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;
Комментарии:
1. Спасибо, это работает. exec (‘выберите 5 ЛУЧШИХ sd.OutletBPID, md.Product, SUM(TRx’ @flag ‘) как TotalTRx’ @flag ‘ из sdata как sd, md, oa, где sd. PSetID = md.Группа идентификаторов PsetID по sd. OutletBPID, md.Product’)
2. Невозможно выполнить ПРИВЕДЕНИЕ () внутри EXEC() таким образом.
3. @AaronBertrand — да, пропустил это. Обновил мой ответ