Relatório: Agrupar e Ordenar - Delphi
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
Curtidas 0
Respostas
Arthur Heinrich
12/08/2024
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
GOSTEI 0
Renan
12/08/2024
Olá, Arthur.
Obrigado pela dica, fiz os ajustes aqui e rodou perfeitamente.
Obrigado pela dica, fiz os ajustes aqui e rodou perfeitamente.
GOSTEI 0