2013-10-29 22 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