不能在窗口框架中使用子查询或变量

时间:2018-02-12 06:37:41

标签: sql-server

为什么我不能在窗口框架语句中使用子查询或变量,如下面的代码:

    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

1 个答案:

答案 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