Ajuda em SQL Group By

Delphi

22/03/2005

Pessoal tenho uma Tabela com a seguinte estrutura:

CodHistorico, depto, Valor preciso fazer um group By que some o campo valor de todos os codhistorico iguais sei que não posso dar um select * e agrupar por um campo só por Ex. não posso fazer isso:

Select *
from Lancamento
Group By CodHistorico

Como poderia fazer isso??


Ariovaldo

Ariovaldo

Curtidas 0

Respostas

Faelcavalcanti

Faelcavalcanti

22/03/2005

Pessoal tenho uma Tabela com a seguinte estrutura: CodHistorico, depto, Valor preciso fazer um group By que some o campo valor de todos os codhistorico iguais sei que não posso dar um select * e agrupar por um campo só por Ex. não posso fazer isso: Select * from Lancamento Group By CodHistorico Como poderia fazer isso??


Cara é o seguinte o problema é o tal do [b:7356543b9e]*[/b:7356543b9e]. Acho que não têm jeito você terá que especificar todos os campos no [b:7356543b9e]Select[/b:7356543b9e] ou apenas o [b:7356543b9e]CodHistorico[/b:7356543b9e]. Tipow:
SELECT CODHISTORICO FROM LANCAMENTO GROUP BY CODHISTORICO

ou
SELECT CODHISTORICO, NOMECAMPO1, NOMECAMPO2, ..... FROM LANCAMENTO GROUP BY CODHISTORICO


:wink:
Falow!


GOSTEI 0
Ariovaldo

Ariovaldo

22/03/2005

Realmente, mesmo especificando todos os campos no Select ele não aceita agrupar por apenas um, qual seria a solução para este caso?


GOSTEI 0
Marcio.theis

Marcio.theis

22/03/2005

Ou você faz:

SELECT CODHISTORICO FROM LANCAMENTO GROUP BY CODHISTORICO

ou

SELECT CODHISTORICO, NOMECAMPO1, NOMECAMPO2
FROM LANCAMENTO
GROUP BY CODHISTORICO, NOMECAMPO1, NOMECAMPO2


GOSTEI 0
Faelcavalcanti

Faelcavalcanti

22/03/2005

Realmente, mesmo especificando todos os campos no Select ele não aceita agrupar por apenas um, qual seria a solução para este caso?


Cara, acho que me expressei errado, mais para cada campo individualizado no Select, terá que ser especificado no [b:752d44fade]Group by[/b:752d44fade] sacow, ou seja, para cada campo no Select você colocará no Group By.

Mas se for o caso de você quiser especificar uma função tipow SUM(Valor) da tabela de Lancamentos, não precisará especificar no Group By.

Espero que tenha conseguido!!!!!

:wink:
Falow!


GOSTEI 0
Kotho

Kotho

22/03/2005

O GROUP BY é utlizado quando queremos agrupar registros (como você disse, somando-se algum campo)... isto fará que, ao invés de retornar 10 registros (por exemplo), retornará 3... para o banco fazer isso, ele precisará saber quais os campos serão unificados. Quando fazemos:

SELECT CDHISTORICO, SUM(VALOR) AS SOMA
FROM LANCAMENTO
GROUP BY CDHISTORICO

estamos dizendo ao banco para agrupar os historicos (isto quer dizer que a quantidade de historicos diferentes será a quantidade de registros) e somar esse agrupamento em SOMA.

Se precisarmos agrupar mais um campo juntamente com CDHISTORICO, devemos fazer:

SELECT CDHISTORICO, NOMECAMPO1, SUM(VALOR) AS SOMA
FROM LANCAMENTO
GROUP BY CDHISTORICO, NOMECAMPO1

Nesse caso, a combinação de CDHISTORICO e NOMECAMPO1 é que determinará a quantidade de registros.

Espero ter sido claro.


GOSTEI 0
Ariovaldo

Ariovaldo

22/03/2005

Pessoal ainda não resolvi e nem sei como resolver e pelo que estou vendo vai ser dificil, porque por exemplo como vou mostrar a Soma de cada Departamento se tenho várias vezes na tabela o mesmo departamento com valores diferente


GOSTEI 0
Faelcavalcanti

Faelcavalcanti

22/03/2005

Cara. Não sei porque insiste tantos com o Group By, você deve utilizar o [b:368a16ff7f]Where[/b:368a16ff7f] como o seu caso para vários departamentos, depois você se preocupa como estes dados serão visualizados. Estais utilizando isto para relatório ??? Mas olha só coloca um exemplo de mapeamento de como estão as tabelas do teu banco para agente te dar uma explanação maior sobre como você possa proceder.

Falow!


GOSTEI 0
Emerson Nascimento

Emerson Nascimento

22/03/2005

se vc quer o valor por departamento:
select depto, sum(valor) valortotal 
from Lancamento 
group by depto


se vc quer por departamento e histórico:
select depto, codhistorico, sum(valor) valortotal 
from Lancamento 
group by depto, codhistorico



GOSTEI 0
Ariovaldo

Ariovaldo

22/03/2005

Pessoal segue a minha estrutura de Tabelas e o que preciso que seja impresso:

Tabela Lancamento
Li_IDLancamento, DT_DataLancamento
PK = Li_IDLancamento

ItemLancamento
Li_IDLancamento, Li_IDItemLancamento, CodDepto, Valor
PK = Li_IDItemLancamento

POis bem agora preciso montar um relatório mostrando a soma total do Campo Valor para cada CodDepto e que esteja dentro de um intervalo de data ou seja seria algo assim:
[b:4a9135b79e]Select Lancamento.DT_DataLancamento,
ItemLancamento.CodDepto, Sum(ItemLancamento.Valor)
Left Join ItemLancamento on(Lancamento.Li_idLancamento = ItemLancamento.Li_idLancamento
Where DT_DataLancamento Between DataInicial And DataFinal
Group By ItemLancamento.CodDepto[/b:4a9135b79e]

POrém como já foi discutido isso não funciona


GOSTEI 0
Kotho

Kotho

22/03/2005

O campo Lancamento.DT_DataLancamento deve estar no Group By, pois ele também deverá ser agrupado...

Select Lancamento.DT_DataLancamento,
ItemLancamento.CodDepto, Sum(ItemLancamento.Valor)
Left Join ItemLancamento on(Lancamento.Li_idLancamento = ItemLancamento.Li_idLancamento
Where DT_DataLancamento Between DataInicial And DataFinal
Group By Lancamento.DT_DataLancamento, ItemLancamento.CodDepto


GOSTEI 0
Emerson Nascimento

Emerson Nascimento

22/03/2005

colega, que banco de dados você está utilizando? a construção abaixo funciona no Interbase, Firebird e SQL Server.

Select ItemLancamento.CodDepto, Sum(ItemLancamento.Valor) ValorTotal
from Lancamento
Left Join ItemLancamento on (ItemLancamento.Li_idLancamento=Lancamento.Li_idLancamento)
Where Lancamento.DT_DataLancamento Between :DataInicial And :DataFinal
Group By ItemLancamento.CodDepto


se quiser agupar por data e departamento:
Select Lancamento.DT_DataLancamento, ItemLancamento.CodDepto, Sum(ItemLancamento.Valor) ValorTotal
from Lancamento
Left Join ItemLancamento on (ItemLancamento.Li_idLancamento=Lancamento.Li_idLancamento)
Where Lancamento.DT_DataLancamento Between :DataInicial And :DataFinal
Group By Lancamento.DT_DataLancamento, ItemLancamento.CodDepto



GOSTEI 0
Faelcavalcanti

Faelcavalcanti

22/03/2005

Cara. Têm alguma coisa de errado com o teu código ou talvez configurações do teu relatório. O que de fato não funciona ??? O relatório fica em branco, acontece um erro, os valores dos parâmetros estão vazios ???

:lol: :lol: :lol:
O que o [b:68acc9820a]emerson.en[/b:68acc9820a] falow, tá valendo, mas pelo menos nos dê uma pista melhor !!!!


GOSTEI 0
POSTAR