Consulta SQL. Problema com GROUP BY

Firebird

13/02/2007

E aí pessoal. td bem?
É o seguinte! Estou tendo problemas com a seguinte consulta SQL, que eu faço pra imprimir um relatório com as compras dos clientes.. só que esse relatório tem q ser agrupado por cliente..
Meu código no Delphi que eu estou usando é esse:

     Inicio := DateToStr(DateTimePicker1.Date);
     Final := DateToStr(DateTimePicker2.Date);
     DataModule1.QrHist_Cli.Close;
     DataModule1.QrHist_Cli.SQL.Clear;
     DataModule1.QrHist_Cli.SQL.Add(´Select * FROM(F_Pagto LEFT JOIN Cheques ON F_Pagto.Codigo = Cheques.Cod_F_Pagto) LEFT JOIN Orcamentos ON F_Pagto.cod_orcamento=Orcamentos.orcamento´);
     DataModule1.QrHist_Cli.SQL.Add(´where data_emissao >= :pInicial and data_emissao <= :pFinal order by Orcamentos.Cod_Cliente´);
     DataModule1.QrHist_Cli.Parameters.ParamByName(´pInicial´).Value := StrToDate(Inicio);
     DataModule1.QrHist_Cli.Parameters.ParamByName(´pFinal´).Value := StrToDate(Final);
     DataModule1.QrHist_Cli.Open;



Funciona bem.. porém eu gostaria de agrupar por Clientes.. ou seja, pelo campo Orcamentos.Cod_Cliente ... mas qdo eu adiciono essa linha, obtenho um erro..
Para usar GROUP BY eu tenho q especificar todos os campos, naum posso usar SELECT * .. entaum fui até o Access e fiz a seguinte consulta..
que funcionou perfeitamente sem a expressão GROUP BY

SELECT Orcamentos.Orcamento, Orcamentos.Cod_Cliente, Orcamentos.Valor_Total, Orcamentos.Data_Emissao, Orcamentos.Vendedor, Orcamentos.Desconto, F_Pagto.Cod_Orcamento, F_Pagto.Vencimento, F_Pagto.Valor, F_Pagto.Data_Receb, F_Pagto.Obs, F_Pagto.Parcela, F_Pagto.Total_Pago, Cheques.Cheque, Cheques.Banco, Cheques.Valor
FROM (Orcamentos INNER JOIN F_Pagto ON Orcamentos.Orcamento = F_Pagto.Cod_Orcamento) LEFT JOIN Cheques ON F_Pagto.Codigo = Cheques.Cod_F_Pagto
GROUP BY  Orcamentos.Cod_Cliente
ORDER BY F_Pagto.Vencimento;


Erro:
 Você tentou executar uma consulta que não inclui a expressão ´Orcamento´ especificada como parte de uma função agregada.


Aí eu removo esse campo da consulta, o campo Orcamentos.Orcamento .. e dá o mesmo erro e fala q é outro campo aí vou tirando.. tirando.. e naum fica praticamente nenhum dos campos q eu preciso...
Como eu faço pra resolver isso?[code:1:7d51d083da][/code:1:7d51d083da]


Caiosoft

Caiosoft

Curtidas 0

Respostas

Acacio

Acacio

13/02/2007

A propriedade group by é usado quando você quer agrupar pro grupo e fazer uma soma ou algo assim para aquele grupo, mas todos os outros campos tem que aparecer no group by.

Exemplo ´select codcliente,valorfatura,dataCad, count(codcliente)
from movimento
group by codcliente,valorfatura,dataCad´
ou seja todos os outros campos que não for o count tem que ir no group by. Agora sobre o relatório, imprimir por grupo o relatório já tem essa opção, procure por uma propriedade group e selecione o grupo que queres.


GOSTEI 0
Caiosoft

Caiosoft

13/02/2007

Opa!! Valew mesmo! Mas o problema é que naum consigo agrupar no Rave!!! eu sei agrupar... já fiz outros.. porém esse naum consegui!! O único jeito q dá certo de Agrupar por Cliente é eu ordenar por Cliente (ORDER BY COD_CLIENTE) aí fuciona!!! porém, as datas de Vencimento ficam todas foras de ordem...

Aí c eu ordeno por datas de Vencimento... os grupos ficam errados... aparece mais de uma vez o mesmo Cliente em Grupos diferentes.... naum aparecem outros....

Oq vc acha q pode ser?
Obrigado


GOSTEI 0
Caiosoft

Caiosoft

13/02/2007

Teria como eu entaum ORDENAR pelos dois campos??? isso resolveria... como q eu faria isso???


Obrigado


GOSTEI 0
Sremulador

Sremulador

13/02/2007

order by campo1[b:5c8d768c95], [/b:5c8d768c95]campo2...


GOSTEI 0
Caiosoft

Caiosoft

13/02/2007

Ficou perfeito! Muito obrigado pela atenção!!

Até a próxima!! :D


GOSTEI 0
POSTAR