Mais uma de função
Olá pessoal,
Preciso criar uma função que me retorne a soma dos valores dos eventos de férias. A consulta SQL retorna certinha mas quando tento criar a função retorna o erro:
Msg 130, Nível 15, Estado 1, Procedimento fn_FeriasLiquido, Linha 17 [Linha de Início do Lote 0]
Cannot perform an aggregate function on an expression containing an aggregate or a subquery.
Como posso resolver isso?
Grato.
Preciso criar uma função que me retorne a soma dos valores dos eventos de férias. A consulta SQL retorna certinha mas quando tento criar a função retorna o erro:
Msg 130, Nível 15, Estado 1, Procedimento fn_FeriasLiquido, Linha 17 [Linha de Início do Lote 0]
Cannot perform an aggregate function on an expression containing an aggregate or a subquery.
CREATE OR ALTER FUNCTION [dbo].[fn_FeriasLiquido] ( @CHAPA_S AS VARCHAR(16) ) RETURNS DECIMAL(18,2) AS BEGIN DECLARE @FIMPERAQUIS_D AS DATETIME DECLARE @RETORNO AS DECIMAL(18,2) SET @FIMPERAQUIS_D = (SELECT MAX(X.FIMPERAQUIS) FROM PFUFERIAS X WHERE X.PERIODOABERTO = 0 AND X.CHAPA = @CHAPA_S) SET @RETORNO = SUM((SELECT CASE B.PROVDESCBASE WHEN ''D'' THEN A.VALOR * -1 WHEN ''P'' THEN A.VALOR ELSE 0 END FROM PFUFERIASVERBAS A INNER JOIN PEVENTO B ON (B.CODIGO = A.CODEVENTO AND B.CODCOLIGADA = A.CODCOLIGADA) WHERE A.CHAPA = @CHAPA_S AND A.FIMPERAQUIS = @FIMPERAQUIS_D)) RETURN @RETORNO END
Como posso resolver isso?
Grato.
Ilano Caldas
Curtidas 0
Respostas
Ilano Caldas
05/12/2023
Consegui resolver! Ficou assim:
CREATE OR ALTER FUNCTION [dbo].[fn_FeriasLiquido] ( @CHAPA_S AS VARCHAR(16) ) RETURNS DECIMAL(18,2) AS BEGIN DECLARE @FIMPERAQUIS_D AS DATETIME DECLARE @RETORNO AS DECIMAL(18,2) SET @RETORNO = (SELECT SUM(A.VALOR) FROM PFUFERIASVERBAS A INNER JOIN PEVENTO B ON (B.CODIGO = A.CODEVENTO AND B.CODCOLIGADA = A.CODCOLIGADA) WHERE B.PROVDESCBASE = 'P' AND A.CHAPA = @CHAPA_S AND A.FIMPERAQUIS = (SELECT MAX(X.FIMPERAQUIS) FROM PFUFERIAS X WHERE X.PERIODOABERTO = 0 AND X.CHAPA = @CHAPA_S)) - (SELECT SUM(A.VALOR) FROM PFUFERIASVERBAS A INNER JOIN PEVENTO B ON (B.CODIGO = A.CODEVENTO AND B.CODCOLIGADA = A.CODCOLIGADA) WHERE B.PROVDESCBASE = 'D' AND A.CHAPA = @CHAPA_S AND A.FIMPERAQUIS = (SELECT MAX(X.FIMPERAQUIS) FROM PFUFERIAS X WHERE X.PERIODOABERTO = 0 AND X.CHAPA = @CHAPA_S)) RETURN @RETORNO END
GOSTEI 0