0

我写了这个 Median 函数,但它执行时出错。有人可以指导我代码中有什么问题吗?

BEGIN
    CREATE TABLE #ITEMORDERDETAILS
      (
         ITEM   CHAR(15),
         QTYSHP DECIMAL(21, 6),
         RQDATE DATETIME
      )

    DECLARE @Median FLOAT
    DECLARE @ITEM CHAR(15)
    DECLARE @ORDERCNT INT

    SET @ITEM=@ITEMN

    INSERT #ITEMORDERDETAILS
    SELECT ITEM,
           QTYSHP,
           RQDATE
    FROM   tbl123456
    WHERE  PRICE != '0'
           AND SALESMN != 'WB'
           AND RQDATE > ( getdate () - 180 )
           AND ITEM = @ITEM
    UNION
    SELECT ITEM,
           QTYSHP,
           RQDATE
    FROM   tbl123
    WHERE  PRICE != '0'
           AND SALESMN != 'WB'
           AND RQDATE > ( getdate () - 180 )
           AND ITEM = @ITEM

    SELECT @ORDERCNT = count (1)
    FROM   #ITEMORDERDETAILS

    --SELECT @ORDERCNT
    SELECT @Median = ( sum(QTYSHP) / @ORDERCNT )
    FROM   #ITEMORDERDETAILS

    SELECT @Median AS 'Median'

    --SELECT * from #ITEMORDERDETAILS
    DROP TABLE #ITEMORDERDETAILS

    RETURN @Median
END 

错误

消息 2772,级别 16,状态 1,过程 f_Get_Average_Order_Size_Median,第 34 行无法从函数内访问临时表。

消息 2772,级别 16,状态 1,过程 f_Get_Average_Order_Size_Median,第 35 行无法从函数内访问临时表。

消息 2772,级别 16,状态 1,过程 f_Get_Average_Order_Size_Median,第 42 行无法从函数内访问临时表。

消息 156,级别 15,状态 1,过程 f_Get_Average_Order_Size_Median,第 46 行关键字“SELECT”附近的语法不正确。

4

1 回答 1

1

原因在您的错误消息中:

Line 34 Cannot access temporary tables from within a function

如果您创建一个函数,那么您可以访问的内容是有限的。

但是,如果您使用 SQL Server 2012,则无需编写自己的中值函数,但可以使用PERCENTILE_DISC

PERCENTILE_DISC (0.5) WITHIN GROUP (ORDER BY XXXX) 
                      OVER (PARTITION BY YYYY) AS Median
于 2013-10-29T13:54:00.960 回答