somar usando sql
tenho uma tabela que esta desta forma
Shampoo Para Cabelos Normais 2CARLOS LOJA
Shampoo Para Cabelos Oleosos 2CARLOS LOJA
Photoplus FPS 30 - Bloqueador Solar1KARLA ASSED
Desodorante Antiperspirante Roll-On1KARLA ASSED
Photoplus FPS 30 - Bloqueador Solar1ELIANE MATHIAS
Fluido ´C´ - Serum Facial 1 JORGE MARIZ
Sabonete Liquido para Peles Secas1CARLOS LOJA
Complex Up - Creme Facial 1 ANGELA LETA
nessa mesma tabela tenho um campo totrec, eu queria somar a qtd de cada medico e joga nesse campo, pos tenhp que colocar em ordem de qtd vendida e desse jeito que a tabela esta eu noa consigo usar o order by, o que devo fazer? ficaria assim no caso do medico carlos loja todo campo dele totrec teria o valor 5.
Shampoo Para Cabelos Normais 2CARLOS LOJA
Shampoo Para Cabelos Oleosos 2CARLOS LOJA
Photoplus FPS 30 - Bloqueador Solar1KARLA ASSED
Desodorante Antiperspirante Roll-On1KARLA ASSED
Photoplus FPS 30 - Bloqueador Solar1ELIANE MATHIAS
Fluido ´C´ - Serum Facial 1 JORGE MARIZ
Sabonete Liquido para Peles Secas1CARLOS LOJA
Complex Up - Creme Facial 1 ANGELA LETA
nessa mesma tabela tenho um campo totrec, eu queria somar a qtd de cada medico e joga nesse campo, pos tenhp que colocar em ordem de qtd vendida e desse jeito que a tabela esta eu noa consigo usar o order by, o que devo fazer? ficaria assim no caso do medico carlos loja todo campo dele totrec teria o valor 5.
Rjcerri
Curtidas 0
Respostas
Agostinho
03/08/2005
imagino q poderia ser assim
Tabela VENDA
PRODUTO
QTDE
MEDICO
O SELECT PODERIA SER
SELECT VENDA.PRODUTO,
VENDA.MEDICO,
sum(VENDAS.QTDE) as VENDAS
from VENDA where MEDICO = :MEDICO
orde by vendas.medico
Tabela VENDA
PRODUTO
QTDE
MEDICO
O SELECT PODERIA SER
SELECT VENDA.PRODUTO,
VENDA.MEDICO,
sum(VENDAS.QTDE) as VENDAS
from VENDA where MEDICO = :MEDICO
orde by vendas.medico
GOSTEI 0
Rjcerri
03/08/2005
não entendi essa parte
sum(VENDAS.QTDE) as VENDAS
from VENDA where MEDICO = :MEDICO
orde by vendas.medico
quem é vendas? vc disse que venda era a tabela
eu fiz e da erro de campo invalido.
sum(VENDAS.QTDE) as VENDAS
from VENDA where MEDICO = :MEDICO
orde by vendas.medico
quem é vendas? vc disse que venda era a tabela
eu fiz e da erro de campo invalido.
GOSTEI 0
Horus
03/08/2005
Acho que houve um problema na digitação.
O correto seria:
Isso considerando que o nome da tabela é VENDA. (no singular)
No caso o VENDAS é o campo resultado da soma do campo QTDE.
Espero ter ajudado.
O correto seria:
sum(venda.qtde) as vendas from venda where medico = :MEDICO order by venda.medico
Isso considerando que o nome da tabela é VENDA. (no singular)
No caso o VENDAS é o campo resultado da soma do campo QTDE.
Espero ter ajudado.
GOSTEI 0
Rjcerri
03/08/2005
fiz assim
(´select datavenda,codigo,descricao,quantidade,medico,nvisitas,
nvisitasobj,objetivorec,varvisita,
divulgadora,sum(receitas.quantidade) as vendas from receitas where MEDICO=:MEDICO order by receitas.medico´);
ai da esse erro
Gruoup BY is required when both aggregate and non-aggregate fields are used in result set
(´select datavenda,codigo,descricao,quantidade,medico,nvisitas,
nvisitasobj,objetivorec,varvisita,
divulgadora,sum(receitas.quantidade) as vendas from receitas where MEDICO=:MEDICO order by receitas.medico´);
ai da esse erro
Gruoup BY is required when both aggregate and non-aggregate fields are used in result set
GOSTEI 0
Marco Salles
03/08/2005
Amigo , pode te sugerir algo
Tente fazer passo a passo estas etapas
1) Coloque um novo componente query no seu projeto.. não use o ´Velho´
2)Link o DataSorce a este query , a DgGrid a este DataSourec e coloque na propriedade DataBase da query o Aliase corresppondente
3) Va na propriedade sql desse novo componente query e escreva o seguinte
4)Apos isto de um Open a nivel de projeto na query
5) O Que isto deve ter fornecer :?: :?: :?:
ira aparecer na grid os nomes dos medicos e um outro campo chamado
Total com a soma da quantidade ...
Este campo que voce diz ter :::
isto não é necessário , pois a propria consulta na query fornece este campo , sem ter que grava-lo fisicamente na Tabela
6)Apos ter feito isto em tempo de projeto podemos passar para nivel de execução...Mas primeiro faça exatamente isto
P:S Tudo isto foi feito baseado que voce tem um Campo MEDICO, QUANTIDADE, e sua tabela chame RECEITAS.
P:S não coloque nada no Editor de propriedades desta query , por enquanto.
Tente fazer passo a passo estas etapas
1) Coloque um novo componente query no seu projeto.. não use o ´Velho´
2)Link o DataSorce a este query , a DgGrid a este DataSourec e coloque na propriedade DataBase da query o Aliase corresppondente
3) Va na propriedade sql desse novo componente query e escreva o seguinte
select Medico,Sum(quantidade) as Total From Receitas Group By Medico
4)Apos isto de um Open a nivel de projeto na query
5) O Que isto deve ter fornecer :?: :?: :?:
ficaria assim no caso do medico carlos loja todo campo dele totrec teria o valor 5.
ira aparecer na grid os nomes dos medicos e um outro campo chamado
Total com a soma da quantidade ...
Este campo que voce diz ter :::
nessa mesma tabela tenho um campo totrec
isto não é necessário , pois a propria consulta na query fornece este campo , sem ter que grava-lo fisicamente na Tabela
6)Apos ter feito isto em tempo de projeto podemos passar para nivel de execução...Mas primeiro faça exatamente isto
P:S Tudo isto foi feito baseado que voce tem um Campo MEDICO, QUANTIDADE, e sua tabela chame RECEITAS.
P:S não coloque nada no Editor de propriedades desta query , por enquanto.
GOSTEI 0
Rjcerri
03/08/2005
Muito legal, fiz o exemplo e funcionou apareceu no dbgrid o medico e o total de produtos, mas quando fui fazer no sistema deu esse erro.
when group by exists, every simple field in projectors must be in group by
fiz assim
select descricao,medico,nvisitas,nvisitasobj,objetivorec,varvisita,divulgadora,sum(quantidade) as total from receitas Group by medico
essa query esta no before print do quickreport
when group by exists, every simple field in projectors must be in group by
fiz assim
select descricao,medico,nvisitas,nvisitasobj,objetivorec,varvisita,divulgadora,sum(quantidade) as total from receitas Group by medico
essa query esta no before print do quickreport
GOSTEI 0
Marco Salles
03/08/2005
Muito legal, fiz o exemplo e funcionou apareceu no dbgrid o medico e o total de produtos,
mas quando fui fazer no sistema deu esse erro.
when group by exists, every simple field in projectors must be in group by
Antes de passas Para a segunda etapa , quero destacar que ha um erro conceitual em relação a pesquisa que voce esta fazendo é o resultado que voce esta querendo Obter..
No primeiro tópico voce disse o seguinte:::
eu queria somar a qtd de cada medico e joga nesse campo
Olha , não te sentido apresentar o resultado da soma dos Produtos vendidos pelos médicos e numa mesma Query apresentar por exemplo a descrição desses Produtos..
Ora a Total de Produtos vendidos Por cada Médido é unico , Porém a descrição desses produtos Não é Unica....
eu citei o campo descrição porque é isto que voce me apresentou quando voce disse que estava fazendo assim
fiz assim
select [b:c5fbc5d32d]descricao[/b:c5fbc5d32d],medico,nvisitas,nvisitasobj,objetivorec,varvisita,divulgadora,sum(quantidade) as total from receitas Group by medico
essa query esta no before print do quickreport
Da mesma forma , com foi citado o campo [b:c5fbc5d32d]descrição[/b:c5fbc5d32d] , também poderia citar o Campo [b:c5fbc5d32d]nvisitas[/b:c5fbc5d32d] etc...
Então voce deve definir o que voce quer de fato... Se for apresentar somente a quantidade de Produtos Indicados por cada médico , a consulta sql é igual aquela que nos fizemos a nivel de projeto...
GOSTEI 0
Rjcerri
03/08/2005
O que eu quero é colocar em order by a soma do campo quantidade para sair no relatorio, porque ele esta em ordem de medico, estou usando qrgroup, assim ele mostra o total de cada produto e no final o total daquele medico. Por isso que eu queria criar um campo e nele jogar a soma para poder usar o order by nesse campo, ficariam assim
carlos loja sabonete 1 7
carlos loja batom 3 7
carlos loja fluido 2 7
carlos loja xampoo 1 7
acho que assim eu poderia usar o order by, mas como fazer essa soma e que o problema.
carlos loja sabonete 1 7
carlos loja batom 3 7
carlos loja fluido 2 7
carlos loja xampoo 1 7
acho que assim eu poderia usar o order by, mas como fazer essa soma e que o problema.
GOSTEI 0
Rjcerri
03/08/2005
tem como fazer isso?
GOSTEI 0
Marco Salles
03/08/2005
O que eu quero é colocar em order by a soma do campo quantidade para sair no relatorio, porque ele esta em ordem de medico, estou usando qrgroup, assim ele mostra o total de cada produto e no final o total daquele medico. Por isso que eu queria criar um campo e nele jogar a soma para poder usar o order by nesse campo, ficariam assim
carlos loja sabonete 1 7
carlos loja batom 3 7
carlos loja fluido 2 7
carlos loja xampoo 1 7
tem como fazer isso?
Ja que o problema é impressão (sair no relatorio.. no final o total daquele medico. )
se eu entendi bem , isto deveria resolver
carlos loja sabonete 1 carlos loja batom 3 carlos loja fluido 2 carlos loja xampoo 1 Total = 7
Então sugiro a utilização do [color=darkblue:80e2ced7a4][b:80e2ced7a4]QRExpr1 [/b:80e2ced7a4][/color:80e2ced7a4]para somar o total de cada médico
Para o [b:80e2ced7a4]Agrupamento de quantidade dos produtos[/b:80e2ced7a4] vamos tentar fazer o seguinte
:arrow:
1)vamos acompanhar passo a passo
select Medico,descricao From Receitas Order By Medico,descricao
o que retorna isso
Pode retornar como resultado isto...
carlos loja batom 2
carlos loja batom 2
carlos loja fluido 1
carlos loja fluido 1
carlos loja sabonete 1
carlos loja xampoo 1
[b:80e2ced7a4]então sugiro tentar uma subconsulta.. [/b:80e2ced7a4]Que seria um alinhamento de select
2)Apague a consulta sql anteiro e escreva essa nova consulta sql , tudo isso a nivel de projeto
:arrow:
select Medico,descricao From Receitas where Exists(Select Descricao,(NomeDoCampoQuantidade) as TotalDeProdutos From Receitas Group by Descricao) Order By Medico,descricao
[b:80e2ced7a4]Faça isto a nivel de projeto siga os pasos de inicais.. [/b:80e2ced7a4]Se aparecer bo Dbgrid da maneira que voce quer podemos atacar o problema do QRExpr1
GOSTEI 0
Rjcerri
03/08/2005
no relatorio o campo quantidade já aparece como eu quero, estou usando qrgroup e qrexpr e estou usando order by medico,descricao, mas o problema que estao pedindo em order de total quantidade de produtos. mas como eu vou fazer order by se nao tenho esse campo total da quantidade de cada medico? tentei a função mas não funcionou, deu essa mensagem
GROUP BY exists, every simple fieldin projectors must be in group by.
ele esta assim
sabonete 3
xampoo 2
batom 4
carlos loja 9
xampoo 1
creme 2
locao 1
karla assed 4
GROUP BY exists, every simple fieldin projectors must be in group by.
ele esta assim
sabonete 3
xampoo 2
batom 4
carlos loja 9
xampoo 1
creme 2
locao 1
karla assed 4
GOSTEI 0
Marco Salles
03/08/2005
select Medico,descricao From Receitas where Exists(Select (NomeDoCampoQuantidade) as TotalDeProdutos From Receitas OrderBy Total deProdutos) Order By Medico
Tente isso a nivel de projeto e retorne se ira dar erro pi p que aparece na grid
GOSTEI 0
Rjcerri
03/08/2005
Amigo, não deu certo, parti pra outra coisa(bacalhau), fiz uma outra tabela aonde so mandei o nome do medico e o total, e crie um campo totrec na tabela original, depois mandei o valor para essa tabela. Crente que tinha resolvido o problema e fiz assin na query do relatorio.
Qreceita.SQL.Add(´select * from receitas order by medico,descricao,totrec´);
agora ele esta dando essa mensagem de erro
Field in order by must be in result set
sera que e porque o total repete a cada registro do medico?
Qreceita.SQL.Add(´select * from receitas order by medico,descricao,totrec´);
agora ele esta dando essa mensagem de erro
Field in order by must be in result set
sera que e porque o total repete a cada registro do medico?
GOSTEI 0
Marco Salles
03/08/2005
Agora minha cabeça e talvez quem estiver acompanhando este tópico deve estar um nó....
desde do inicio to sentindo que falta um pouco de modelagem de dados na sua tabela :cry: :cry: :cry:
Ao inves de criar este campo ´Trotec´ , que parece que não irá trazer informação nenhuma , a não ser no relátorio , eu sugiro que voce altere a modalagem dos seus dados
Tipo Isto
[b:80b225d9d0]Onde a tabela A E B se relaciona pelo Cod-Medico [/b:80b225d9d0]
Daria para fazer o que voce quer sem muitas dificuldades
[b:80b225d9d0]O Resultado seria este:[/b:80b225d9d0]
Para a Query da tabela A
Note que para a query Da Tabela B
P:S Importante
[b:80b225d9d0]Na queryB na propriedade DataSource no Objecto Inspector selecionar o DatSource Da Tabela A[/b:80b225d9d0]
Deixe o fieds editor das duas query em Branco...
No mais boa sorte...
desde do inicio to sentindo que falta um pouco de modelagem de dados na sua tabela :cry: :cry: :cry:
Ao inves de criar este campo ´Trotec´ , que parece que não irá trazer informação nenhuma , a não ser no relátorio , eu sugiro que voce altere a modalagem dos seus dados
Tipo Isto
Tabela A
Cod-Medico
Nome_Medico
Tabela B
Cod-Medico
Descricao Produto
Quantidade do Produto
[b:80b225d9d0]Onde a tabela A E B se relaciona pelo Cod-Medico [/b:80b225d9d0]
Daria para fazer o que voce quer sem muitas dificuldades
[b:80b225d9d0]O Resultado seria este:[/b:80b225d9d0]
Carlos Loja -->> Banda Detail
sabonete 1 -->> QrBandSubDetail batom 3 loja fluido 2 loja xampoo 1
Total = 7 -->>> QrExpress
Outro medico etc...
Para a Query da tabela A
Select *From A
Note que para a query Da Tabela B
select descricao,Sum(NomeDoCampoQuantidade) as TotalDeProdutos From B Wehere Cod-Medico=:Cod-Medico -->>>> Aqui se faz o Relacionamento Group by Descricao
P:S Importante
[b:80b225d9d0]Na queryB na propriedade DataSource no Objecto Inspector selecionar o DatSource Da Tabela A[/b:80b225d9d0]
Deixe o fieds editor das duas query em Branco...
No mais boa sorte...
GOSTEI 0
Rjcerri
03/08/2005
Valeu amigo pela paciencia!!! Agora ta certo. um abraço.
GOSTEI 0
Marco Salles
03/08/2005
Valeu amigo...
GOSTEI 0