Relatório: Agrupar e Ordenar - Delphi
12/08/2024
0
Pessoal, estou montando um relatório que liste as contas a pagar num periodo x, agrupadas por grupo de contas
Então montei uma SQL assim no IbExpert, que traz o que eu preciso.
No entanto, no relatório eu quero que esses grupos de contas apareçam quebrados por vencimento e também ordenados por vencimento
ex:
12/08/2024
grupo 1------------total
grupo 2------------total
grupo 3------------total
13/08/2024
grupo 2------------total
grupo 3------------total
Comecei assim, mas gera erro no group by
Então montei uma SQL assim no IbExpert, que traz o que eu preciso.
select a.nome_grupo, sum(b.total) as tot_pgto from grupo_contas as a inner join tbvencidas as b on a.codigo = b.cod_grupo_contas where b.dt_pagamento between ''10.07.2024'' and ''22.07.2024'' group by a.nome_grupo order by a.nome_grupo
No entanto, no relatório eu quero que esses grupos de contas apareçam quebrados por vencimento e também ordenados por vencimento
ex:
12/08/2024
grupo 1------------total
grupo 2------------total
grupo 3------------total
13/08/2024
grupo 2------------total
grupo 3------------total
Comecei assim, mas gera erro no group by
Query1.Close; Query1.SQL.Clear; Query1.SQL.Add(''SELECT D.DATA_DOC, SUM(D.TOTAL) AS TOT, D.VENCIMENTO, D.DT_PAGAMENTO, G.NOME_GRUPO''); Query1.SQL.Add(''FROM TBDUPLICATAS AS D''); Query1.SQL.Add(''INNER JOIN GRUPO_CONTAS AS G ON G.CODIGO = D.COD_GRUPO_CONTAS''); Query1.SQL.Add(''WHERE D.VENCIMENTO >= :INI and D.VENCIMENTO <= :FIM''); if cbGrupoContas.Text <> ''TODOS'' then Query1.SQL.Add(''and D.COD_GRUPO_CONTAS = ''+ IntToStr(Integer(cbGrupoContas.Items.Objects[cbGrupoContas.ItemIndex]))); if cbCentroCusto.Text <> ''TODOS'' then Query1.SQL.Add(''and D.COD_PROJETO = ''+ IntToStr(Integer(cbCentroCusto.Items.Objects[cbCentroCusto.ItemIndex]))); Query1.SQL.Add(''GROUP BY G.NOME_GRUPO''); Query1.SQL.Add(''ORDER BY D.VENCIMENTO''); Query1.ParamByName(''INI'').AsDate := dtpInicio.Date; Query1.ParamByName(''FIM'').AsDate := dtpFim.Date; Query1.Prepare; Query1.Open;
Renan
Curtir tópico
+ 0
Responder
Posts
12/08/2024
Arthur Heinrich
Quando criamos um agrupamento (group by), todas as colunas retornadas precisam ser chaves de agrupamento (aparecendo no GROUP BY) ou valores agregados, em que se aplica alguma função agregadora ( sum(), count(), min(), max(), avg(), etc.).
Na sua query, o group by contém apenas a coluna G.NOME_GRUPO.
As colunas D.DATA_DOC, D.VENCIMENTO e D.DT_PAGAMENTO não pertencem nem ao group by nem utilizam funções de agregação.
Para que apareça com quebra por vencimento, você deveria incluir o vencimento no group by:
Na sua query, o group by contém apenas a coluna G.NOME_GRUPO.
As colunas D.DATA_DOC, D.VENCIMENTO e D.DT_PAGAMENTO não pertencem nem ao group by nem utilizam funções de agregação.
Para que apareça com quebra por vencimento, você deveria incluir o vencimento no group by:
select b.vencimento, a.nome_grupo, sum(b.total) as tot_pgto from grupo_contas as a inner join tbvencidas as b on a.codigo = b.cod_grupo_contas where b.dt_pagamento between ''10.07.2024'' and ''22.07.2024'' group by b.vencimento, a.nome_grupo order by b.vencimento, a.nome_grupo
Responder
13/08/2024
Renan
Olá, Arthur.
Obrigado pela dica, fiz os ajustes aqui e rodou perfeitamente.
Obrigado pela dica, fiz os ajustes aqui e rodou perfeitamente.
Responder
Clique aqui para fazer login e interagir na Comunidade :)