为什么我不能在窗口框架语句中使用子查询或变量,如下面的代码:
CREATE FUNCTION aaa (@i AS INT)
returns TABLE AS
RETURN
SELECT sum(freight) OVER(partition BY custid ORDER BY orderdate rows
BETWEEN 1 following AND @i following ) AS su,
*
FROM sales.orders
答案 0 :(得分:0)
您需要动态SQL,如下所示 - 。动态SQL是不可能的功能。使用存储过程并在函数内调用它。
DECLARE @i AS INT
DECLARE @SQL AS VARCHAR(MAX) = 'SELECT * , sum(freight) OVER(partition BY custid ORDER BY orderdate rows
BETWEEN 1 following AND ' + CAST(@i AS VARCHAR(50)) + ' following ) AS su
FROM sales.orders'
EXEC ( @SQL )
如果您可以尝试使用硬编码值创建相同内容,则可以创建。看到 10以下硬编码值..我正在传递。
CREATE FUNCTION aaa (@i AS INT)
returns TABLE AS
RETURN
SELECT sum(freight) OVER(partition BY custid ORDER BY orderdate rows
BETWEEN 1 following AND 10 following ) AS su, *
FROM sales.orders