Pular para o conteúdo principal

Postagem em destaque

BlackTDN :: Autenticação 2FA para Usuário Root no WSL

--- # naldodj-wsl-2FA ## Autenticação 2FA para Usuário Root no WSL ### Introdução O Windows Subsystem for Linux (WSL) é uma ferramenta poderosa que permite aos desenvolvedores executar um ambiente Linux diretamente no Windows. No entanto, a segurança é uma preocupação importante, especialmente quando se trata de acessar o usuário root. Neste post, vamos mostrar como configurar a autenticação de dois fatores (2FA) para o usuário root ao acessar o WSL, garantindo uma camada adicional de segurança. ### Objetivo Vamos configurar um script de login que valida a senha do root e usa autenticação 2FA baseada em Time-based One-Time Password (TOTP), usando ferramentas comuns como `openssl`, `oathtool`, e `perl`. ### Passo 1: Instalar as Ferramentas Necessárias Primeiro, precisamos garantir que temos todas as ferramentas necessárias instaladas. Isso inclui `openssl`, `oathtool`, e `perl`. ```bash sudo apt-get update sudo apt-get install openssl oathtool perl ``` Para os scripts em Lua.

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