2013-10-29 24 views
0

我写了这个中值函数,但它执行有错误..有人可以指导我什么是错的代码?SQL服务器不能接受中值函数

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

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

    SET @[email protected] 

    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行无法从函数内访问临时 表。

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

+2

**无法从函数中访问临时表** – zimdanen

+0

' @ table'变量可以用来代替。 –

回答

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 
+0

谢谢allen..We使用SQL Server 2005 .. – user2755462