SQL server不能接受中值函数

时间:2013-10-29 13:49:25

标签: sql-server

我写了这个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 

错误

  

Ms 2772,Level 16,State 1,Procedure   f_Get_Average_Order_Size_Median,第34行无法访问临时   函数中的表。

     

Ms 2772,Level 16,State 1,Procedure   f_Get_Average_Order_Size_Median,第35行无法访问临时   函数中的表。

     

Ms 2772,Level 16,State 1,Procedure   f_Get_Average_Order_Size_Median,第42行无法访问临时   函数中的表。

     

Msg 156,Level 15,State 1,Procedure   f_Get_Average_Order_Size_Median,第46行附近的语法不正确   关键字'SELECT'。

1 个答案:

答案 0 :(得分: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