在WITH表达式中是否有一种定义变量的方法?像这样:
;WITH SomeName AS (
declare @somevar decimal
set @somevar = ...
SELECT ....)
可能吗?
在WITH表达式中是否有一种定义变量的方法?像这样:
;WITH SomeName AS (
declare @somevar decimal
set @somevar = ...
SELECT ....)
可能吗?
DECLARE @somevar DECIMAL
;WITH SomeName AS (SELECT....)
SELECT @somevar = ...
FROM SomeName
根据MSDN的说法:
CTE_query_definition指定了一个SELECT语句,其结果集用于填充公共表达式。 CTE_query_definition的SELECT语句必须满足与创建视图相同的要求,但是CTE不能定义另一个CTE。
我曾几次不得不采取以下方法作为解决方法(例如在输入数据表达式中使用R服务器进行t-sql的工作。请参见https://learn.microsoft.com/en-us/sql/advanced-analytics/tutorials/quickstart-r-inputs-and-outputs?view=sql-server-2017)。以下是该示例:
WITH ctename (varname) as (
SELECT MAX(somevar) FROM sometable
)
SELECT *
FROM someothertable a
JOIN ctename b on 1=1
WHERE a.col1 > b.varname;
我知道这是一个旧问题,但是可以使用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
WITH
相同的行上。我感到非常惭愧。对不起。 - Andriy M