CTE_query_definition Определяет Оператор SELECT, набор результатов которого заполняет общее табличное выражение. Оператор SELECT для CTE_query_definition должно соответствовать те же требования, что и для создания view, за исключением того, что CTE не может определить другой CTE.
Ответ 2
Я знаю, что это старый вопрос, но можно приблизить "переменное" поведение с помощью CTE и разумного применения CROSS JOIN для использования мощности обработки на основе набора.
WITH CTE_Name (somevar1, somevar2)
AS (SELECT 0.15, 0.65)
SELECT
sq.Col1 * cte.somevar1 AS Calc1,
sq.Col2 * cte.somevar2 AS Calc2
FROM (
SELECT 10 Col1, 20 Col2
UNION SELECT 30, 40
) AS sq
CROSS JOIN CTE_Name AS cte
Обратите внимание, что использование CROSS JOIN возвращает декартово произведение таблиц, участвующих в объединении, поэтому, чтобы избежать чрезмерных/повторяющихся строк в конечном результате, CTE должен вернуть одну и ТОЛЬКО одну запись.