Pular para o conteúdo principal

Postagem em destaque

BlackTDN :: Social :: Rifa Festival da Arte Capoeira Projeto Eu Sou Ninja

Angariar fundos para cobrir os custos logísticos do "Festival da Arte Capoeira" e apoiar o projeto Eu Sou Ninja em sua missão de promover a integração social e cultural na comunidade de Jacaraípe. Com a criação da rifa, buscamos envolver a comunidade de forma ativa no financiamento do evento, permitindo que todos contribuam para o sucesso do festival e para a continuidade das atividades do projeto. Prêmio: Copia da minha biblioteca pessoal de AdvPL/TLpp ..etc Participe da Rifa Eu já contribui. Só falta você! ```cmd Pasta de C:\GitHub\naldodj-tlpp 13/04/2024 19:17 . 19/03/2024 13:49 .. 05/01/2024 12:22 2.742 .gitattributes 14/11/2023 16:02 83 .gitignore 02/12/2023 20:08 .vscode 05/01/2024 12:05 bin 13/04/2024 19:18 4.121 ChangeLog.txt 27/12/2023 02:05 include 14/11/2023 16:02 27.030 LICENSE.txt 14/11/2023 16:02 0 makepatch.lst 14/11/2

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 deste blog

BlackTDN :: RLeg ~ Desvendando a Função ParamBox

Para quem precisar desenvolver uma interface de entrada de dados, coisa rápida, e não quer ter aquele trabalhão danado que todos já sabemos, o Protheus tem uma função que ajuda muito, é uma interface semelhante a função Pergunte, porém com muito mais opção de objeto de entrada de dados, alias até colocar o scrollbox desta interface com todos os objetos em outra MsDialog ou Wizard é simples. Vejam o exemplo abaixo, boa sorte! Rleg. //---------------------------------------------------------- // Função exemplo utilizando a função ParamBox() //---------------------------------------------------------- User Function xParamBox() Local aRet := {} Local aParamBox := {} Local aCombo := {"Janeiro","Fevereiro","Março","Abril","Maio","Junho","Julho","Agosto","Setembro","Outubro","Novembro","Dezembro"} Local i := 0 Private cCadastro := "xParambox" // ---------------

Protheus :: Chamando Funções do Menu Diretamente e sem a Necessidade de Login

Ferne$ perguntou: "...é possível abrir alguma rotina do sistema sem solicitar login ao usuário, como por exemplo a rotina MATA010..." Sim Ferne$, é possível sim. Abaixo um Exemplo para a Chamada à função MATA010 sem a necessidade de Login no sistema. #INCLUDE "PROTHEUS.CH" #INCLUDE "TBICONN.CH" /*/ Funcao: MATA010Ex Data: 30/04/2011 Autor: Marinaldo de Jesus Descricao: Executar a Funcao MATA010 diretamente sem a necessidade de LOGIN no Protheus Sintaxe: 1 ) U_MATA010Ex ( Chamada diretamente na Tela de Entrada do Sistema ) ; ou 2 ) totvsclient.exe -q -p=u_MATA010Ex -a=01;01 -c=rnp_local -e=rnp -m -l ( Chamada Via Linha de Comando ) /*/ User Function MATA010Ex( cEmpFil ) Local aEmpFil Local bWindowInit := { || __Execute( "MATA010()" , "xxxxxxxxxxxxxxxxxxxx" , "MATA010" , "SIGAFAT" , "SIGAFAT", 1 , .T. ) } Local cEmp Local cFil Local cMod Local cModName := "SIGAFAT" DEFA

BlackTDN :: Customizando a interface de Login no Protheus e by You

A publicação “ BlackTDN :: By You e sua nova tela de login ”  de nosso amigo OBona deu o que falar e, em função disso, esse que a muito não vos escreve resolveu criar uma versão onde será possível personalizar, “por completo”, a tela de login no Protheus/by You. Considerando que OBona já havia “mapeado, identificado e customizado” as imagens peguei-as emprestadas para o exemplo que se segue: O primeiro passo para a customização “total” da interface de login do Protheus/by You será implementar o “Ponto de Entrada” ChgPrDir (Diretório de impressão) . Usaremos esse PE juntamente como programa U_FindMsObject.prg (apresentado pela primeira vez em: Protheus :: ADVPL : The Container : Presents Pandora's box ). Diferente do exemplo proposto por OBona, que substitui, durante o processo de compilação, as imagens padrões do sistema (excluindo-as) por imagens customizadas (com o mesmo nome) este novo exemplo mantém, no RPO, as imagens padrões adicionando novas imagens customizadas que serã