Ajuda em SQL Group By
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??
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
Curtidas 0
Respostas
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
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
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
SELECT CODHISTORICO FROM LANCAMENTO GROUP BY CODHISTORICO
ou
SELECT CODHISTORICO, NOMECAMPO1, NOMECAMPO2
FROM LANCAMENTO
GROUP BY CODHISTORICO, NOMECAMPO1, NOMECAMPO2
GOSTEI 0
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
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.
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
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
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!
Falow!
GOSTEI 0
Emerson Nascimento
22/03/2005
se vc quer o valor por departamento:
se vc quer por departamento e histórico:
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
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
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
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
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
22/03/2005
colega, que banco de dados você está utilizando? a construção abaixo funciona no Interbase, Firebird e SQL Server.
se quiser agupar por data e departamento:
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
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 !!!!
: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