Fórum Incrementando um Pivot #620803
05/12/2023
0
Olá pessoal,
Estou tentando fazer um pivot utilizando o script abaixo. Porém, está retornando a mensagem:
Como posso resolver isso?
Grato.
Estou tentando fazer um pivot utilizando o script abaixo. Porém, está retornando a mensagem:
Mensagem 102, Nível 15, Estado 1, Linha 82
Sintaxe incorreta próxima a '('.
Mensagem 102, Nível 15, Estado 1, Linha 82
Sintaxe incorreta próxima a ')'.
Sintaxe incorreta próxima a '('.
Mensagem 102, Nível 15, Estado 1, Linha 82
Sintaxe incorreta próxima a ')'.
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 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 | CREATE OR ALTER FUNCTION [dbo].[SplitStrings] ( @List NVARCHAR( MAX ), @Delimiter NVARCHAR(255) ) RETURNS TABLE WITH SCHEMABINDING AS RETURN WITH E1(N) AS ( SELECT 1 UNION ALL SELECT 1 UNION ALL SELECT 1 UNION ALL SELECT 1 UNION ALL SELECT 1 UNION ALL SELECT 1 UNION ALL SELECT 1 UNION ALL SELECT 1 UNION ALL SELECT 1 UNION ALL SELECT 1), E2(N) AS ( SELECT 1 FROM E1 a, E1 b), E4(N) AS ( SELECT 1 FROM E2 a, E2 b), E42(N) AS ( SELECT 1 FROM E4 a, E2 b), cteTally(N) AS ( SELECT 0 UNION ALL SELECT TOP (DATALENGTH( ISNULL (@List,1))) ROW_NUMBER() OVER ( ORDER BY ( SELECT NULL )) FROM E42), cteStart(N1) AS ( SELECT t.N+1 FROM cteTally t WHERE ( SUBSTRING (@List,t.N,1) = @Delimiter OR t.N = 0)) SELECT Item = SUBSTRING (@List, s.N1, ISNULL ( NULLIF (CHARINDEX(@Delimiter,@List,s.N1),0)-s.N1,8000)) FROM cteStart s; GO CREATE OR ALTER FUNCTION fn_COLUNAS_PIVOT ( @CODCOLIGADA_I AS INTEGER , @ANOCOMP_I AS INTEGER , @MESCOMP_I AS INTEGER ) RETURNS VARCHAR ( MAX ) AS BEGIN DECLARE @RETORNO AS VARCHAR ( MAX ) SET @RETORNO = STUFF(( SELECT DISTINCT ',' + AMOVFUN.CODEVE FROM AMOVFUN INNER JOIN PFUNC ON PFUNC.CODCOLIGADA = AMOVFUN.CODCOLIGADA AND PFUNC.CHAPA = AMOVFUN.CHAPA WHERE AMOVFUN.CODCOLIGADA = @CODCOLIGADA_I AND AMOVFUN.ANOCOMP = @ANOCOMP_I AND AMOVFUN.MESCOMP = @MESCOMP_I AND PFUNC.CODSITUACAO <> 'D' FOR XML PATH( '' )), 1, 1, '' ) RETURN @RETORNO END GO DECLARE @CODCOLIGADA_I AS INTEGER = 1 DECLARE @ANOCOMP_I AS INTEGER = 2022 DECLARE @MESCOMP_I AS INTEGER = 3 SELECT * FROM ( SELECT AMOVFUN.CHAPA , PFUNC.NOME , PFUNC.CODSITUACAO , PFUNC.CODSECAO , PSECAO.DESCRICAO , CAST (AMOVFUN.NUMHORAS AS VARCHAR ) AS HORAS , AMOVFUN.CODEVE , AMOVFUN.INICIOPER , AMOVFUN.FIMPER , AMOVFUN.ANOCOMP , AMOVFUN.MESCOMP FROM AMOVFUN INNER JOIN PFUNC ON PFUNC.CODCOLIGADA = AMOVFUN.CODCOLIGADA AND PFUNC.CHAPA = AMOVFUN.CHAPA INNER JOIN PSECAO ON PSECAO.CODCOLIGADA = PFUNC.CODCOLIGADA AND PSECAO.CODIGO = PFUNC.CODSECAO WHERE AMOVFUN.CODCOLIGADA = @CODCOLIGADA_I AND AMOVFUN.ANOCOMP = @ANOCOMP_I AND AMOVFUN.MESCOMP = @MESCOMP_I AND PFUNC.CODSITUACAO <> 'D' ) AS TABELA PIVOT ( MAX (HORAS) FOR CODEVE IN (( SELECT item FROM dbo.SplitStrings((dbo.fn_COLUNAS_PIVOT(@CODCOLIGADA_I, @ANOCOMP_I, @MESCOMP_I)), ',' ))) COLUNAS |
Como posso resolver isso?
Grato.

Ilano Caldas
Curtir tópico
+ 0
Responder
Posts
07/12/2023
Ilano Caldas
Alguém tem alguma sugestão?
Responder
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)