_Créditos das imagens: ChatGPT_ # LeetCode (17) :: Comparando Implementações do Desafio "Letter Combinations of a Phone Number" em Harbour e TOTVS TLPP O desafio [**"Letter Combinations of a Phone Number"**](https://leetcode.com/problems/letter-combinations-of-a-phone-number/description/) (Combinações de Letras de um Número de Telefone) é um problema clássico de programação que envolve a geração de todas as combinações possíveis de letras que um número de telefone pode representar, com base no mapeamento tradicional dos teclados de telefone. Abaixo, comparamos duas implementações desse desafio: uma em **Harbour** e outra em **TOTVS TLPP** (TOTVS Language Plus Plus). ## O Desafio Dada uma string contendo dígitos de 2 a 9, retorne todas as combinações possíveis de letras que esses dígitos podem representar. O mapeamento dos dígitos para as letras é o mesmo dos teclados de telefone tradicionais: - 2: "abc" - 3: "def" - 4: "ghi" - 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