Mais uma de função

05/12/2023

0

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.

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

Ilano Caldas

Responder

Posts

05/12/2023

Ilano Caldas

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

Responder

Assista grátis a nossa aula inaugural

Assitir aula

Saiba por que programar é uma questão de
sobrevivência e como aprender sem riscos

Assistir agora

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar