我不能调用sql函数
我写了这个函数我不能调用sql函数,sql,sql-server,Sql,Sql Server,我写了这个函数 ALTER FUNCTION dbo.MEDIAVTRINEW (@CODIGO VARCHAR(25), @YEAR VARCHAR(4), @TRI INT) RETURNS TABLE RETURN (SELECT ROUND(ISNULL(SUM(D2.D2_QUANT) / 3, 0), 2) AS MEDIA FROM SD2010 D2 WHERE D2.D_E_L_E_T_ = ''
ALTER FUNCTION dbo.MEDIAVTRINEW
(@CODIGO VARCHAR(25),
@YEAR VARCHAR(4),
@TRI INT)
RETURNS TABLE
RETURN (SELECT ROUND(ISNULL(SUM(D2.D2_QUANT) / 3, 0), 2) AS MEDIA
FROM SD2010 D2
WHERE D2.D_E_L_E_T_ = ''
AND D2.D2_TES IN ('502', '506', '505')
AND D2.D2_COD = @CODIGO
AND ((@TRI = 1
AND D2.D2_EMISSAO >= CONCAT(@YEAR, '01', '01')
AND D2.D2_EMISSAO <= CONCAT(@YEAR, '03', '31')
)
OR
(@TRI = 2
AND D2.D2_EMISSAO >= CONCAT(@YEAR, '04', '01')
AND D2.D2_EMISSAO <= CONCAT(@YEAR, '06', '31')
)
OR
(@TRI = 3
AND D2.D2_EMISSAO >= CONCAT(@YEAR, '07', '01')
AND D2.D2_EMISSAO <= CONCAT(@YEAR, '09', '31')
)
OR
(@TRI = 4
AND D2.D2_EMISSAO >= CONCAT(@YEAR, '10', '01')
AND D2.D2_EMISSAO <= CONCAT(@YEAR, '12', '31')
)
)
)
GO
Select * from dbo.MEDIAVTRINEW('001004','20171201',4)
PS:我单独执行了这个函数,抛出了参数,它成功了。您需要使用
FROM
子句来调用表值函数。您的语法适用于标量函数
ALTER FUNCTION dbo.MEDIAVTRINEW
(@CODIGO VARCHAR(25),
@YEAR VARCHAR(4),
@TRI INT)
RETURNS TABLE
RETURN (SELECT ROUND(ISNULL(SUM(D2.D2_QUANT) / 3, 0), 2) AS MEDIA
FROM SD2010 D2
WHERE D2.D_E_L_E_T_ = ''
AND D2.D2_TES IN ('502', '506', '505')
AND D2.D2_COD = @CODIGO
AND ((@TRI = 1
AND D2.D2_EMISSAO >= CONCAT(@YEAR, '01', '01')
AND D2.D2_EMISSAO <= CONCAT(@YEAR, '03', '31')
)
OR
(@TRI = 2
AND D2.D2_EMISSAO >= CONCAT(@YEAR, '04', '01')
AND D2.D2_EMISSAO <= CONCAT(@YEAR, '06', '31')
)
OR
(@TRI = 3
AND D2.D2_EMISSAO >= CONCAT(@YEAR, '07', '01')
AND D2.D2_EMISSAO <= CONCAT(@YEAR, '09', '31')
)
OR
(@TRI = 4
AND D2.D2_EMISSAO >= CONCAT(@YEAR, '10', '01')
AND D2.D2_EMISSAO <= CONCAT(@YEAR, '12', '31')
)
)
)
GO
Select * from dbo.MEDIAVTRINEW('001004','20171201',4)
作为一个表值函数,我怀疑您需要一个交叉应用或外部应用 示例
Select A.*
,B.*
From YourTable A
Cross Apply dbo.MEDIAVTRINEW('001004','20171201',4) B
使用外部应用查看空值
用字段值替换参数是否使用ms sql server?由于函数返回一个表,因此应在
FROM
子句中调用它<代码>从dbo.MEDIAVTRINEW('001004','20171201',4)中选择*既没有6月31日(06)也没有9月31日(09)-您应该修复这些错误