Fórum Mais uma de função #620801

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.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
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:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
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

Gostei + 0

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

Aceitar