我写了这个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'。
答案 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