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