_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....
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 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:
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 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
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!
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!
ResponderExcluirAliás @Naldo, agora que analisei no detalhe o seu escopo, muito semelhante ao que tinha implementado na época. Muito top.
ResponderExcluir