Fórum somar usando sql #290639

03/08/2005

0

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.


Rjcerri

Rjcerri

Responder

Posts

03/08/2005

Agostinho

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


Responder

Gostei + 0

03/08/2005

Rjcerri

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.


Responder

Gostei + 0

04/08/2005

Horus

Acho que houve um problema na digitação.
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.


Responder

Gostei + 0

04/08/2005

Rjcerri

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


Responder

Gostei + 0

04/08/2005

Marco Salles

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

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.


Responder

Gostei + 0

05/08/2005

Rjcerri

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


Responder

Gostei + 0

05/08/2005

Marco Salles

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...


Responder

Gostei + 0

05/08/2005

Rjcerri

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.


Responder

Gostei + 0

05/08/2005

Rjcerri

tem como fazer isso?


Responder

Gostei + 0

06/08/2005

Marco Salles

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


Responder

Gostei + 0

08/08/2005

Rjcerri

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


Responder

Gostei + 0

08/08/2005

Marco Salles

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


Responder

Gostei + 0

08/08/2005

Rjcerri

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?


Responder

Gostei + 0

08/08/2005

Marco Salles

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

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...


Responder

Gostei + 0

08/08/2005

Rjcerri

Valeu amigo pela paciencia!!! Agora ta certo. um abraço.


Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar