Pular para o conteúdo principal

Postagem em destaque

BlackTDN :: LeetCode :: Comparando Implementações Harbour e TLPP para o Desafio Longest Palindromic Substring

_Créditos das imagens: ChatGPT_ ### LeetCode :: Comparando Implementações Harbour e TLPP para o Desafio Longest Palindromic Substring Resolver o problema do [Longest Palindromic Substring](https://leetcode.com/problems/longest-palindromic-substring/description/) é um exercício clássico de programação, que desafia desenvolvedores a encontrar a maior substring palindrômica dentro de uma string. Recentemente, exploramos soluções tanto em Harbour quanto em TLPP (Total Language Protheus Programming). Neste artigo, comparamos as implementações nessas duas linguagens, destacando suas semelhanças, diferenças e funcionalidades específicas. #### Implementações em Harbour ##### Versão 5.1 Essa solução utiliza a técnica de expansão a partir do centro do palíndromo. Cada caractere ou par de caracteres consecutivos é considerado um possível "centro". O algoritmo expande em ambas as direções enquanto os caracteres forem iguais, retornando o maior palíndromo encontrado. ##### Versão 5....

BlackTDN :: TOTVS :: MSSQL :: Pivot Tables


Source: Github Pivot*

As tabelas pivot são ferramentas poderosas para analisar dados agregados em uma tabela dinâmica. 

Alguns benefícios de usar tabelas pivot em consultas no SQL Server incluem:

1) Agrupamento de dados: As tabelas pivot permitem agrupar dados de várias linhas em uma única linha, tornando mais fácil de visualizar e comparar informações.

2) Análise de dados: As tabelas pivot podem ser usadas para gerar estatísticas, somas e médias de dados, o que é útil para análise de dados e tomada de decisão.

3) Filtro de dados: As tabelas pivot permitem filtrar dados de acordo com critérios específicos, facilitando a identificação de tendências e padrões.

4) Interatividade: As tabelas pivot podem ser usadas com ferramentas de visualização de dados, permitindo que os usuários explorem e interajam com os dados de maneira intuitiva.

5) Melhora na performance: As tabelas pivot são otimizadas para trabalhar com grandes conjuntos de dados, o que pode melhorar significativamente a performance de consultas.

Considerando o seguinte cenário: Tabela de Grupos/Sub-Grupos de Verbas (utilizada para classificar as verbas, do cadastro de verbas, conforme Grupo/Sub-Grupo) onde queremos:

1) Extrair dados da Ficha Financeira do funcionário, por determinado período do ano, e que classifique por:
1.1) Grupo de Verba e Meses do Ano;
1.2) Meses do Ano e Grupos de Verbas.

Teríamos:

a) Grupos/Sub-Grupos de Verbas;
b) Classificação das Verbas conforme Grupo/Sub-Grupo;
c) Consulta Pivot Grupo de Verba e Meses do Ano;
d) Consulta Pivot Meses do Ano e Grupos de Verbas.

Tabela de Grupo de Verbas:


SELECT  
 ZY_.ZY__FILIAL	
,ZY_.ZY__CODIGO	
,ZY_.ZY__DESC	
,ZY_.ZY__MASTER
,RTRIM(LTRIM(CONVERT(VARCHAR(MAX),ZY_.ZY__HTML))) ZY__HTML
,ZY_.ZY__SQLFLD
,ZY_.ZY__FPRFER
,ZY_.ZY__PROVFE
,ZY_.ZY__FPR13S
,ZY_.ZY__PROV13
,ZY_.ZY__FPRRES
,ZY_.ZY__PROVRE
FROM ZY_990 ZY_ WHERE 1=1
ORDER BY ZY_.ZY__FILIAL
		,ZY_.ZY__MASTER
		,ZY_.ZY__CODIGO

Dados:
Tabela de Grupo/SubGrupo

Tabela de Verbas (Classificada conforme Grupo/Sub-Grupo):


SELECT SRV.RV_FILIAL
	  ,SRV.RV_COD 
	  ,(CASE SRV.RV_DESCDET WHEN '' THEN SRV.RV_DESC ELSE SRV.RV_DESCDET END) RV_DESC
	  ,SRV.RV_ZY__COD
	  ,ZY_.ZY__CODIGO
	  ,ZY_.ZY__DESC
  FROM SRV990 SRV
  LEFT 
  JOIN ZY_990 ZY_ ON (
	ZY_.ZY__CODIGO=SRV.RV_ZY__COD 
	AND ((CASE ZY_.ZY__FILIAL WHEN '' THEN 1 WHEN SRV.RV_FILIAL THEN 1 ELSE 0 END)=1) 
)
WHERE 1=1
  AND ZY_.D_E_L_E_T_=''
  AND SRV.D_E_L_E_T_=''
  AND SRV.RV_FILIAL>=''
  AND ZY_.ZY__FILIAL>=''

Dados:
Tabela de Verbas Grupo/SubGrupo

Consulta Pivot por Grupo/Meses do Ano:


IF OBJECT_ID('tempdb..##tmp_table_pivot_painel_acumulados_periodo_empresa_20230124_001', 'U') IS NOT NULL
	DROP TABLE ##tmp_table_pivot_painel_acumulados_periodo_empresa_20230124_001

BEGIN
    DECLARE @COMANDO_SQL  AS VARCHAR(MAX)
    DECLARE @COLUNAS_PIVOT AS VARCHAR(MAX)
    DECLARE @COLUNAS_PIVOT_SUM AS VARCHAR(MAX)
    DECLARE @COLUNAS_PIVOT_TOTAL AS VARCHAR(MAX)
    DECLARE @COLUNAS_PIVOT_NONULLS AS VARCHAR(MAX)
    DECLARE @DATARQDE AS VARCHAR(6)
    SET @DATARQDE='202101'
    DECLARE @DATARQATE AS VARCHAR(6)
    SET @DATARQATE='202112'
    DECLARE @CCDE AS VARCHAR(MAX)
    SET @CCDE=''
    DECLARE @CCATE AS VARCHAR(MAX)
    SET @CCATE='z'
    DECLARE @FILIALDE AS VARCHAR(MAX)
    SET @FILIALDE=''
    DECLARE @FILIALATE AS VARCHAR(MAX)
    SET @FILIALATE='z'
    DECLARE @GRUPODE AS VARCHAR(MAX)
    SET @GRUPODE=''
    DECLARE @GRUPOATE AS VARCHAR(MAX)
    SET @GRUPOATE='z'
    DECLARE @TTSNAME AS VARCHAR(MAX)
    SET @TTSNAME='tmp_table_pivot_painel_acumulados_periodo_empresa_20230124_001'
    DECLARE @TABLENAME AS VARCHAR(MAX)
    SET @TABLENAME='##tmp_table_pivot_painel_acumulados_periodo_empresa_20230124_001'
    SET LANGUAGE Portuguese
BEGIN TRY
        SET @COLUNAS_PIVOT = STUFF((SELECT  ',' + QUOTENAME(RTRIM(LTRIM(cols_pivot.RD_DATARQ))) 
        FROM (
                SELECT SRD.RD_DATARQ 
                       ,SRD.RD_DATARQ YEARMONT
					   ,(ROW_NUMBER() OVER (PARTITION BY SRD.RD_DATARQ ORDER BY SRD.RD_DATARQ )) ID
				  FROM SRD990 SRD 
                  JOIN SRV990 SRV ON (SRV.RV_COD=SRD.RD_PD AND ((CASE SRV.RV_FILIAL WHEN '' THEN 1 WHEN SRD.RD_FILIAL THEN 1 ELSE 0 END)=1) )
                  JOIN ZY_990 ZY_ ON (ZY_.ZY__CODIGO=SRV.RV_ZY__COD AND ((CASE ZY_.ZY__FILIAL WHEN '' THEN 1 WHEN SRV.RV_FILIAL THEN 1 ELSE 0 END)=1) )
                  JOIN SRA990 SRA ON (SRA.RA_FILIAL=SRD.RD_FILIAL AND SRA.RA_MAT=SRD.RD_MAT)
                 WHERE SRD.D_E_L_E_T_='' 
                   AND SRA.D_E_L_E_T_=''
                   AND SRV.D_E_L_E_T_=''
                   AND ZY_.D_E_L_E_T_=''
                   AND ZY_.ZY__MASTER<>'' 
                   AND SRD.RD_DATARQ BETWEEN @DATARQDE AND @DATARQATE
                   AND SRD.RD_CC BETWEEN @CCDE AND @CCATE 
                   AND SRD.RD_FILIAL BETWEEN @FILIALDE AND @FILIALATE
                   AND ZY_.ZY__MASTER BETWEEN @GRUPODE AND @GRUPOATE
                   AND ZY_.ZY__SQLFLD<>''
              GROUP BY SRD.RD_DATARQ
        ) cols_pivot ORDER BY YEARMONT,ID FOR XML PATH('') ), 1, 1, '') 
        SET @COLUNAS_PIVOT_NONULLS='SELECT '+REPLACE(REPLACE(REPLACE(@COLUNAS_PIVOT,',',' UNION SELECT'),'[',''''),']',''' RD_DATARQ')     
        EXECUTE('SELECT * INTO ##tmp_table_pivot_painel_acumulados_periodo_empresa_20230124_002 FROM ('+@COLUNAS_PIVOT_NONULLS+') t')
        SET @COLUNAS_PIVOT_NONULLS = STUFF((SELECT DISTINCT ',ISNULL(' + QUOTENAME(RTRIM(LTRIM(cols_pivot_notnull.RD_DATARQ)))+',0)' + QUOTENAME(RTRIM(LTRIM(cols_pivot_notnull.RD_DATARQ))) 
        FROM ( select * from ##tmp_table_pivot_painel_acumulados_periodo_empresa_20230124_002 ) cols_pivot_notnull FOR XML PATH('')), 1, 1, '')
        SET @COLUNAS_PIVOT_SUM = STUFF((SELECT DISTINCT ',ISNULL(SUM(' + QUOTENAME(RTRIM(LTRIM(cols_pivot_sum.RD_DATARQ)))+'),0)' + QUOTENAME(RTRIM(LTRIM(CONCAT(UPPER(LEFT(DATENAME(MONTH,CAST(CONCAT(cols_pivot_sum.RD_DATARQ,'01') AS DATETIME)),3)),LEFT(cols_pivot_sum.RD_DATARQ,4))))) 
        FROM ( select * from ##tmp_table_pivot_painel_acumulados_periodo_empresa_20230124_002 ) cols_pivot_sum FOR XML PATH('')), 1, 1, '')    
        SET @COLUNAS_PIVOT_TOTAL = STUFF((SELECT DISTINCT ',ISNULL(' + QUOTENAME(RTRIM(LTRIM(cols_pivot_total.RD_DATARQ)))+',0)'  
        FROM ( select * from ##tmp_table_pivot_painel_acumulados_periodo_empresa_20230124_002 ) cols_pivot_total FOR XML PATH('')), 1, 1, '') 
        SET @COLUNAS_PIVOT_TOTAL=REPLACE(REPLACE(@COLUNAS_PIVOT_TOTAL,',','+'),'+0',',0')
        DROP TABLE ##tmp_table_pivot_painel_acumulados_periodo_empresa_20230124_002
        SET @COMANDO_SQL = '
             SELECT t.ZY__MASTER
                   ,ZY_.ZY__DESC
                   ,'+@COLUNAS_PIVOT_SUM+'
                   ,TOTAL=SUM(t.TOTAL)  
              FROM (			        
                    SELECT t.ZY__MASTER
                          ,'+@COLUNAS_PIVOT_NONULLS+'
                          ,TOTAL=SUM('+@COLUNAS_PIVOT_TOTAL+')
                     FROM 
                    (SELECT * FROM 
                        (
                            SELECT SRD.RD_DATARQ 
                                  ,ZY_.ZY__MASTER
                                  ,SUM(SRD.RD_VALOR) RD_VALOR
                            FROM SRA990 SRA
                            JOIN SRD990 SRD ON (SRA.RA_FILIAL=SRD.RD_FILIAL AND SRA.RA_MAT=SRD.RD_MAT)
                            JOIN SRV990 SRV ON (SRV.RV_COD=SRD.RD_PD AND ((CASE SRV.RV_FILIAL WHEN '''' THEN 1 WHEN SRD.RD_FILIAL THEN 1 ELSE 0 END)=1) )
                            JOIN ZY_990 ZY_ ON (ZY_.ZY__CODIGO=SRV.RV_ZY__COD AND ((CASE ZY_.ZY__FILIAL WHEN '''' THEN 1 WHEN SRV.RV_FILIAL THEN 1 ELSE 0 END)=1) )
                            JOIN CTT990 CTT ON (CTT.CTT_CUSTO=SRD.RD_CC AND ((CASE CTT.CTT_FILIAL WHEN '''' THEN 1 WHEN SRD.RD_FILIAL THEN 1 ELSE 0 END)=1) )
                            WHERE SRD.D_E_L_E_T_='''' 
                              AND SRA.D_E_L_E_T_=''''
                              AND SRV.D_E_L_E_T_=''''
                              AND ZY_.D_E_L_E_T_='''' 
                              AND CTT.D_E_L_E_T_=''''
                              AND SRD.RD_DATARQ BETWEEN '''+@DATARQDE+''' AND '''+@DATARQATE+'''
                              AND SRD.RD_CC BETWEEN '''+@CCDE+''' AND '''+@CCATE+''' 
                              AND SRD.RD_FILIAL BETWEEN '''+@FILIALDE+''' AND '''+@FILIALATE+''' 
                              AND ZY_.ZY__MASTER BETWEEN '''+@GRUPODE+''' AND '''+@GRUPOATE+'''
                              AND ZY_.ZY__SQLFLD<>''''
                         GROUP BY SRD.RD_DATARQ,ZY_.ZY__MASTER
                        ) ROW
                    PIVOT (SUM(ROW.RD_VALOR) FOR ROW.RD_DATARQ IN (' + @COLUNAS_PIVOT + ')) COL ) t
                    GROUP BY t.ZY__MASTER,t.'+@COLUNAS_PIVOT+') t
             JOIN ZY_990 ZY_ ON (ZY_.ZY__CODIGO=t.ZY__MASTER )
             GROUP BY t.ZY__MASTER,ZY_.ZY__DESC'
            BEGIN TRANSACTION @TTSNAME
                EXECUTE('SELECT * INTO '+@TABLENAME+' FROM ('+@COMANDO_SQL+') t') 
            COMMIT TRANSACTION @TTSNAME
	END TRY
BEGIN CATCH
			EXECUTE('SELECT * INTO '+@TABLENAME+' FROM (SELECT '''' ZY__MASTER,'''' ZY__DESC,0 TOTAL ) t')	
	END CATCH;
END

select * from ##tmp_table_pivot_painel_acumulados_periodo_empresa_20230124_001

Dados:
Consulta Grupo/Meses do Ano

Consulta Pivot por Meses do Ano/Grupo:


IF OBJECT_ID('tempdb..##tmp_table_pivot_painel_por_periodo_empresa_grupo_e_subgrupo_20230124_001', 'U') IS NOT NULL
	DROP TABLE ##tmp_table_pivot_painel_por_periodo_empresa_grupo_e_subgrupo_20230124_001

BEGIN
    DECLARE @COMANDO_SQL  AS VARCHAR(MAX)
    DECLARE @COLUNAS_PIVOT AS VARCHAR(MAX)
    DECLARE @COLUNAS_PIVOT_SUM AS VARCHAR(MAX)
    DECLARE @COLUNAS_PIVOT_TOTAL AS VARCHAR(MAX)
    DECLARE @COLUNAS_PIVOT_NONULLS AS VARCHAR(MAX)
    DECLARE @DATARQDE AS VARCHAR(6)
    SET @DATARQDE='202101'
    DECLARE @DATARQATE AS VARCHAR(6)
    SET @DATARQATE='202112'
    DECLARE @CCDE AS VARCHAR(MAX)
    SET @CCDE=''
    DECLARE @CCATE AS VARCHAR(MAX)
    SET @CCATE='z'
    DECLARE @FILIALDE AS VARCHAR(MAX)
    SET @FILIALDE=''
    DECLARE @FILIALATE AS VARCHAR(MAX)
    SET @FILIALATE='z'
    DECLARE @GRUPODE AS VARCHAR(MAX)
    SET @GRUPODE=''
    DECLARE @GRUPOATE AS VARCHAR(MAX)
    SET @GRUPOATE='z'
    DECLARE @TTSNAME AS VARCHAR(MAX)
    SET @TTSNAME='tmp_table_pivot_painel_por_periodo_empresa_grupo_e_subgrupo_20230124_001'
    DECLARE @TABLENAME AS VARCHAR(MAX)
    SET @TABLENAME='##tmp_table_pivot_painel_por_periodo_empresa_grupo_e_subgrupo_20230124_001'
    BEGIN TRY
        SET @COLUNAS_PIVOT = STUFF((SELECT DISTINCT  ','  + QUOTENAME(RTRIM(LTRIM(cols_pivot.ZY__SQLFLDM))) + ','+ QUOTENAME(RTRIM(LTRIM(cols_pivot.ZY__SQLFLDM))+'_'+RTRIM(LTRIM(cols_pivot.ZY__SQLFLD))) 
        FROM (
                SELECT DISTINCT ZY_M.ZY__SQLFLD ZY__SQLFLDM, ZY_.ZY__SQLFLD 
                  FROM SRD990 SRD 
                  JOIN SRV990 SRV ON (SRV.RV_COD=SRD.RD_PD AND ((CASE SRV.RV_FILIAL WHEN '' THEN 1 WHEN SRD.RD_FILIAL THEN 1 ELSE 0 END)=1) )
                  JOIN ZY_990 ZY_ ON (ZY_.ZY__CODIGO=SRV.RV_ZY__COD AND ((CASE ZY_.ZY__FILIAL WHEN '' THEN 1 WHEN SRV.RV_FILIAL THEN 1 ELSE 0 END)=1) )
				  JOIN ZY_990 ZY_M  ON (ZY_M.ZY__CODIGO=ZY_.ZY__MASTER AND ZY_.ZY__FILIAL=ZY_M.ZY__FILIAL )
                  JOIN SRA990 SRA ON (SRA.RA_FILIAL=SRD.RD_FILIAL AND SRA.RA_MAT=SRD.RD_MAT)
                 WHERE SRD.D_E_L_E_T_='' 
                   AND SRA.D_E_L_E_T_=''
                   AND SRV.D_E_L_E_T_=''
                   AND ZY_.D_E_L_E_T_=''
                   AND ZY_.ZY__MASTER<>'' 
                   AND SRD.RD_DATARQ BETWEEN @DATARQDE AND @DATARQATE
                   AND SRD.RD_CC BETWEEN @CCDE AND @CCATE 
                   AND SRD.RD_FILIAL BETWEEN @FILIALDE AND @FILIALATE
                   AND ZY_.ZY__MASTER BETWEEN @GRUPODE AND @GRUPOATE
                   AND ZY_.ZY__SQLFLD<>''
				   GROUP BY ZY_M.ZY__SQLFLD,ZY_.ZY__SQLFLD 
        ) cols_pivot FOR XML PATH('')),1,1,'')
		SET @COLUNAS_PIVOT='SELECT '+REPLACE(REPLACE(REPLACE(@COLUNAS_PIVOT,',',' UNION SELECT'),'[',''''),']',''' ZY__SQLFLD')     
        EXECUTE('SELECT * INTO tmp_table_pivot_painel_por_periodo_empresa_grupo_e_subgrupo_20230124_002 FROM ('+@COLUNAS_PIVOT+') t')
		SET @COLUNAS_PIVOT = STUFF((SELECT DISTINCT   ','  +  QUOTENAME(RTRIM(LTRIM(cols_pivot.ZY__SQLFLD))) 
		FROM ( select * from tmp_table_pivot_painel_por_periodo_empresa_grupo_e_subgrupo_20230124_002 ) cols_pivot FOR XML PATH('')),1,1,'')
		SET @COLUNAS_PIVOT_NONULLS = STUFF((SELECT DISTINCT ',ISNULL(' + QUOTENAME(RTRIM(LTRIM(cols_pivot_notnull.ZY__SQLFLD)))+',0)' + QUOTENAME(RTRIM(LTRIM(cols_pivot_notnull.ZY__SQLFLD))) 
        FROM ( select * from tmp_table_pivot_painel_por_periodo_empresa_grupo_e_subgrupo_20230124_002 ) cols_pivot_notnull FOR XML PATH('')),1,1,'')
        SET @COLUNAS_PIVOT_SUM = STUFF((SELECT DISTINCT ',ISNULL(SUM(' + QUOTENAME(RTRIM(LTRIM(cols_pivot_sum.ZY__SQLFLD)))+'),0)' + QUOTENAME(RTRIM(LTRIM(cols_pivot_sum.ZY__SQLFLD))) 
        FROM ( select * from tmp_table_pivot_painel_por_periodo_empresa_grupo_e_subgrupo_20230124_002 ) cols_pivot_sum FOR XML PATH('')),1,1,'')    
        SET @COLUNAS_PIVOT_TOTAL = STUFF((SELECT DISTINCT ',ISNULL(' + QUOTENAME(RTRIM(LTRIM(cols_pivot_total.ZY__SQLFLD)))+',0)'  
        FROM ( select * from tmp_table_pivot_painel_por_periodo_empresa_grupo_e_subgrupo_20230124_002 where CHARINDEX('_',ZY__SQLFLD)>0 ) cols_pivot_total FOR XML PATH('')),1,1,'')
        SET @COLUNAS_PIVOT_TOTAL=REPLACE(REPLACE(@COLUNAS_PIVOT_TOTAL,',','+'),'+0',',0')
		BEGIN
			WITH ZY__SQLFLD AS
			(
				SELECT DISTINCT SUBSTRING(ZY__SQLFLD,1,CHARINDEX('_',ZY__SQLFLD)) ZY__SQLFLD
				FROM tmp_table_pivot_painel_por_periodo_empresa_grupo_e_subgrupo_20230124_002

			)
			SELECT @COLUNAS_PIVOT=REPLACE(@COLUNAS_PIVOT,LTRIM(RTRIM(ZY__SQLFLD)),'') FROM ZY__SQLFLD
		END
		BEGIN
			WITH ZY__SQLFLD AS
			(
				SELECT DISTINCT SUBSTRING(ZY__SQLFLD,1,CHARINDEX('_',ZY__SQLFLD)) ZY__SQLFLD
				FROM tmp_table_pivot_painel_por_periodo_empresa_grupo_e_subgrupo_20230124_002

			)
			SELECT @COLUNAS_PIVOT_NONULLS=REPLACE(@COLUNAS_PIVOT_NONULLS,LTRIM(RTRIM(ZY__SQLFLD)),'') FROM ZY__SQLFLD
		END
		BEGIN
			WITH ZY__SQLFLD AS
			(
				SELECT DISTINCT SUBSTRING(ZY__SQLFLD,1,CHARINDEX('_',ZY__SQLFLD)) ZY__SQLFLD
				FROM tmp_table_pivot_painel_por_periodo_empresa_grupo_e_subgrupo_20230124_002

			)
			SELECT @COLUNAS_PIVOT_SUM=REPLACE(@COLUNAS_PIVOT_SUM,LTRIM(RTRIM(ZY__SQLFLD)),'') FROM ZY__SQLFLD
		END
		BEGIN
			WITH ZY__SQLFLD AS
			(
				SELECT DISTINCT SUBSTRING(ZY__SQLFLD,1,CHARINDEX('_',ZY__SQLFLD)) ZY__SQLFLD
				FROM tmp_table_pivot_painel_por_periodo_empresa_grupo_e_subgrupo_20230124_002

			)
			SELECT @COLUNAS_PIVOT_TOTAL=REPLACE(@COLUNAS_PIVOT_TOTAL,LTRIM(RTRIM(ZY__SQLFLD)),'') FROM ZY__SQLFLD
		END
		DROP TABLE tmp_table_pivot_painel_por_periodo_empresa_grupo_e_subgrupo_20230124_002
        SET @COMANDO_SQL = '
             SELECT t.RD_DATARQ
                   ,'+@COLUNAS_PIVOT_SUM+'
                   ,TOTAL=SUM(t.TOTAL)  
              FROM 
			  (			        
                    SELECT t.RD_DATARQ
                          ,'+@COLUNAS_PIVOT_NONULLS+'
                          ,TOTAL=SUM('+@COLUNAS_PIVOT_TOTAL+')
                     FROM 
                    (
						SELECT * FROM 
                        (
                            SELECT SRD.RD_DATARQ
                                  ,ZY_.ZY__SQLFLD
								  ,ZY_M.ZY__SQLFLD ZY__SQLFLDM
                                  ,SUM(SRD.RD_VALOR) RD_VALOR
                            FROM SRA990 SRA
                            JOIN SRD990 SRD ON (SRA.RA_FILIAL=SRD.RD_FILIAL AND SRA.RA_MAT=SRD.RD_MAT)
                            JOIN SRV990 SRV ON (SRV.RV_COD=SRD.RD_PD AND ((CASE SRV.RV_FILIAL WHEN '''' THEN 1 WHEN SRD.RD_FILIAL THEN 1 ELSE 0 END)=1) )
                            JOIN ZY_990 ZY_ ON (ZY_.ZY__CODIGO=SRV.RV_ZY__COD AND ((CASE ZY_.ZY__FILIAL WHEN '''' THEN 1 WHEN SRV.RV_FILIAL THEN 1 ELSE 0 END)=1) )
                            JOIN ZY_990 ZY_M  ON (ZY_M.ZY__CODIGO=ZY_.ZY__MASTER AND ZY_.ZY__FILIAL=ZY_M.ZY__FILIAL )
							JOIN CTT990 CTT ON (CTT.CTT_CUSTO=SRD.RD_CC AND ((CASE CTT.CTT_FILIAL WHEN '''' THEN 1 WHEN SRD.RD_FILIAL THEN 1 ELSE 0 END)=1) )
                            WHERE SRD.D_E_L_E_T_='''' 
                              AND SRA.D_E_L_E_T_=''''
                              AND SRV.D_E_L_E_T_=''''
                              AND ZY_.D_E_L_E_T_='''' 
                              AND CTT.D_E_L_E_T_=''''
                              AND SRD.RD_DATARQ BETWEEN '''+@DATARQDE+''' AND '''+@DATARQATE+'''
                              AND SRD.RD_CC BETWEEN '''+@CCDE+''' AND '''+@CCATE+''' 
                              AND SRD.RD_FILIAL BETWEEN '''+@FILIALDE+''' AND '''+@FILIALATE+''' 
                              AND ZY_.ZY__MASTER BETWEEN '''+@GRUPODE+''' AND '''+@GRUPOATE+'''
                              AND ZY_.ZY__SQLFLD<>''''
                         GROUP BY SRD.RD_DATARQ,ZY_M.ZY__CODIGO,ZY_M.ZY__SQLFLD,ZY_.ZY__SQLFLD
                        ) ROW
                    PIVOT (SUM(ROW.RD_VALOR) FOR ZY__SQLFLD IN (' + @COLUNAS_PIVOT + ')) COL 
					UNION
						SELECT * FROM 
                        (
                            SELECT SRD.RD_DATARQ
                                  ,ZY_.ZY__SQLFLD
								  ,ZY_M.ZY__SQLFLD ZY__SQLFLDM
                                  ,SUM(SRD.RD_VALOR) RD_VALOR
                            FROM SRA990 SRA
                            JOIN SRD990 SRD ON (SRA.RA_FILIAL=SRD.RD_FILIAL AND SRA.RA_MAT=SRD.RD_MAT)
                            JOIN SRV990 SRV ON (SRV.RV_COD=SRD.RD_PD AND ((CASE SRV.RV_FILIAL WHEN '''' THEN 1 WHEN SRD.RD_FILIAL THEN 1 ELSE 0 END)=1) )
                            JOIN ZY_990 ZY_ ON (ZY_.ZY__CODIGO=SRV.RV_ZY__COD AND ((CASE ZY_.ZY__FILIAL WHEN '''' THEN 1 WHEN SRV.RV_FILIAL THEN 1 ELSE 0 END)=1) )
                            JOIN ZY_990 ZY_M  ON (ZY_M.ZY__CODIGO=ZY_.ZY__MASTER AND ZY_.ZY__FILIAL=ZY_M.ZY__FILIAL )
							JOIN CTT990 CTT ON (CTT.CTT_CUSTO=SRD.RD_CC AND ((CASE CTT.CTT_FILIAL WHEN '''' THEN 1 WHEN SRD.RD_FILIAL THEN 1 ELSE 0 END)=1) )
                            WHERE SRD.D_E_L_E_T_='''' 
                              AND SRA.D_E_L_E_T_=''''
                              AND SRV.D_E_L_E_T_=''''
                              AND ZY_.D_E_L_E_T_='''' 
                              AND CTT.D_E_L_E_T_=''''
                              AND SRD.RD_DATARQ BETWEEN '''+@DATARQDE+''' AND '''+@DATARQATE+'''
                              AND SRD.RD_CC BETWEEN '''+@CCDE+''' AND '''+@CCATE+''' 
                              AND SRD.RD_FILIAL BETWEEN '''+@FILIALDE+''' AND '''+@FILIALATE+''' 
                              AND ZY_.ZY__MASTER BETWEEN '''+@GRUPODE+''' AND '''+@GRUPOATE+'''
                              AND ZY_.ZY__SQLFLD<>''''
                         GROUP BY SRD.RD_DATARQ,ZY_M.ZY__CODIGO,ZY_M.ZY__SQLFLD,ZY_.ZY__SQLFLD
                        ) ROW
                    PIVOT (SUM(ROW.RD_VALOR) FOR ZY__SQLFLDM IN (' + @COLUNAS_PIVOT + ')) COL 
				) t
                GROUP BY t.RD_DATARQ,t.'+@COLUNAS_PIVOT+'
			 ) t
             GROUP BY t.RD_DATARQ'
            BEGIN TRANSACTION @TTSNAME
                EXECUTE('SELECT * INTO '+@TABLENAME+' FROM ('+@COMANDO_SQL+') t') 
            COMMIT TRANSACTION @TTSNAME
	END TRY
	BEGIN CATCH
			EXECUTE('SELECT * INTO '+@TABLENAME+' FROM (SELECT '''' RD_DATARQ,0 TOTAL ) t')	
	END CATCH;
END

SELECT  * FROM ##tmp_table_pivot_painel_por_periodo_empresa_grupo_e_subgrupo_20230124_001

Dados:
Consulta Meses do Ano/Grupo


Comentários

  1. Certa vez usei PIVOT TABLE no desenvolvimento de um relatório com colunas dinâmicas. Era um razão contábil personalizado, sintético ou analítico. Na vertical as CONTAS e CC, na horizontal as competências (meses), por isso dinâmico, pois as colunas (competências) era de acordo com as datas de e até definidas pelo usuário. Muito útil esse PIVOT TABLE Valeu mais uma vez @Naldo!

    ResponderExcluir
  2. Aliás @Naldo, agora que analisei no detalhe o seu escopo, muito semelhante ao que tinha implementado na época. Muito top.

    ResponderExcluir

Postar um comentário

Postagens mais visitadas