Присвоить результат оператора case переменной

#tsql #sql-server-2008

#tsql #sql-server-2008

Вопрос:

Когда я пытаюсь выполнить следующий оператор, я получаю эту ошибку:

«Оператор SELECT, который присваивает значение переменной, не должен сочетаться с операциями извлечения данных».

 DECLARE @OFR DECIMAL(18,2)
;
SELECT @OFR = 
CASE SUM(ofr.Quantity)
WHEN 0 THEN 0 
ELSE SUM(ofr.Gross) / SUM(ofr.Quantity)
END
FROM DistributionCosts ofr
;
SELECT @OFR
  

Я просто хочу вставить результат этого оператора case в переменную, и я застрял здесь.

Есть идеи?

Спасибо.

Комментарии:

1. Это работает для меня. Уверен, что у вас нет другого столбца в вашем запросе?

2. Да, у меня были другие столбцы, которые я пропустил, я расставил по ним. Извините и спасибо!

Ответ №1:

Вы уверены, что именно в этом заключается ваша ошибка? Я просто выполнил приведенное ниже утверждение, и оно сработало:

 DECLARE @OFR DECIMAL(18,2)
;
with DistributionCosts  as
(
  select 1 as quantity, 5 as gross
  union
  select 5 , 20
)
SELECT @OFR = 
CASE SUM(ofr.Quantity)
WHEN 0 THEN 0 
ELSE SUM(ofr.Gross) / SUM(ofr.Quantity)
END
FROM DistributionCosts ofr

;
SELECT @OFR
  

Если я выбираю столбец в дополнение к установке переменной, я получаю вашу ошибку… Если вы выбираете другой столбец, вам нужно будет либо прекратить выбор этого столбца, либо также назначить этот столбец локальной переменной.

Комментарии:

1. Да, это была проблема, я расставил другие столбцы… Спасибо!