Присвойте результат запроса с помощью? - PullRequest
0 голосов
/ 12 января 2020

Я пишу кусок динамического c SQL, который требует оператора with и передает результаты.

Я ограничен в назначении переменных между скриптами. Мне нужно вернуть результат перед целым с запросом.

Что я хочу сделать, это написать следующий пример в качестве примера.

set @variable = (
  with temp as (
    select number from data
  )
  select avg(number) from temp
)

Но с не возвращает результат ,

Есть ли разумный способ обойти эту проблему?

Я знаю, что могу присвоить переменную после ***select*** как select @variable = avg(number)..., что мне не разрешено делать

Ответы [ 2 ]

0 голосов
/ 12 января 2020

При использовании CTE вам необходимо объявить CTE в начале оператора *1001*, а не в его середине. В этом случае это будет означать:

WITH CTE AS( --A CTE isn't a temporary object, so calling it temp seems silly
    SELECT number
    FROM data)
SELECT @variable = AVG(number)
FROM CTE;

Но здесь действительно нет необходимости в CTE. Вы можете просто написать следующее утверждение:

SELECT @Variable = AVG(number)
FROM data;

Если вы предпочитаете SET, вы можете сделать что-то подобное, но предыдущее утверждение самое короткое:

SET @Variable = (SELECT AVG(number) FROM data);
0 голосов
/ 12 января 2020

Как насчет этого?

set @variable = (
select avg(number) 
from (select number 
             from data)
)
...