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:

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 ')'.


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 VARCHARAS 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

Ilano Caldas

Responder

Posts

07/12/2023

Ilano Caldas

Alguém tem alguma sugestão?
Responder

Gostei + 0

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

Aceitar