Fórum Multiplicar Qtd. por valor em tabela externa #299596

15/10/2005

0

E awe galera tudo bem?????
Entaum preciso da ajuda de vcs dinovo!!!!
seguinte, em uma tabela chamada produtos tenho as seguintes linhas
P1
P2
P3
P4
etc....

cada linha representa uma faixa de peso, por exemplo, 0,20g equivale ao valor gravado na tabela, entaum eu qro gerar um relatório que veja qts encomendas foram gravadas na tabela encomendas com peso entre 0 e 0,20, digamos que sejam 3, e o preço de 0,20g eh 1 real, entaum eu tenho que fazer 3x1 = 3 certo?
Como posso fazer isso?
Lembrando que as informações de qto vale cada preço estão em uma tabela e o peso da encomenda estah em outra...
Por favor se alguem souber me ajudar ficarei mto agradecido...
Vlw


Ramms

Ramms

Responder

Posts

16/10/2005

Edilcimar

a tabela produtos tem que ter um ´código´ do produto, código este que é único para cada produto, na tabela pedidos onde existe a quantidade pedida, tem que ter o mesmo código do produto, aí vc varre a tabela pedidos, pega o código do produto, procura o mesmo na tabela produtos e pega o valor do mesmo e efetua a multiplicação


Responder

Gostei + 0

17/10/2005

Ramms

Esse código do produto que vc fala eh o cód da faixa de peso?
Pq na minha tabela eu tenho um indice ID_PRODUTO aonde esta linkando como master/detail....só que um produto pode ter várias faixas de peso, ai eu pensei eh só fazer um select * from produtos where ID_PRODUTO = ´1´ and p1 >= ´0´ and p1 <= ´0,20´ ........
só que num vai funcionar pq eu vou ter que colocar lá p1, p2, p3, p4, p5, ai eu pensei tenho que fazer uma função que verifique primeiro qual eh a faixa de peso e dps seleciona o preço dele e multiplica....mas ai que estah o problema, como fazer?


Responder

Gostei + 0

21/10/2005

Ramms

Alguém pode me ajudar???


Responder

Gostei + 0

21/10/2005

Emerson Nascimento

explique melhor o que vc quer.
publique a estrutura das suas tabelas.


Responder

Gostei + 0

21/10/2005

Ramms

A Tabela Produtos:

ID_PRODUTO
ID_CLIENTE
NOME
P1
P2
P3
P4
P5
P6
P7
P8
P9
....
Até P20


Kda P# equivale a uma faixa de peso, por exemplo
o P1 eh de 0 a 0,20 gr...

Ai na tabela encomendas eu tenho:

ID_ENCOMENDA
ID_PRODUTO
TRATAMENTO
DESTINATARIO
CEP
ENDEREÇO
BAIRRO
CIDADE
UF
[b:e3557c3590]PESO[/b:e3557c3590]
USUARIO
ROMANEIO
PORTADOR
ID_CLIENTE
SITUACAO
DATABAIXA
DATA
USERBAIXA

entaum eu tenho que pegar o total de encomendas com PESO X e dps verificar na tabela PRODUTOS qual eh o valor do peso X e awe multiplicar.....
Entendeu??
Vlw


Responder

Gostei + 0

21/10/2005

Emerson Nascimento

1a. parte do problema entendido.

2o. como vc sabe que P1 é de 0,00g a 0,20g ? e de onde vem o valor a ser cobrado?


Responder

Gostei + 0

21/10/2005

Ramms

o valor a ser cobrado eh o valor que vai ficar nesse campo, a lógica do prog eh entender que P1 eh de 0 a 0,20 eh isso que eu qro fazer ele entender...
Se vcs tiverem uma alternativa eu agradeço..
Lembrando que o preço naum eh fixo, por exemplo....
o cliente 1 possui valor de 2,00 em encomendas de peso 0 a 0,20...
jah o cliente 2 cobra 3,00
Vlw


Responder

Gostei + 0

21/10/2005

Emerson Nascimento

mais uma pergunta:

Lembrando que o preço naum eh fixo, por exemplo.... o cliente 1 possui valor de 2,00 em encomendas de peso 0 a 0,20... jah o cliente 2 cobra 3,00


isso em produtos diferentes, certo?


Responder

Gostei + 0

21/10/2005

Ramms

mais uma pergunta: [quote:19b7cb068c]Lembrando que o preço naum eh fixo, por exemplo.... o cliente 1 possui valor de 2,00 em encomendas de peso 0 a 0,20... jah o cliente 2 cobra 3,00


isso em produtos diferentes, certo?[/quote:19b7cb068c]
Isso


Responder

Gostei + 0

21/10/2005

Emerson Nascimento

bom, eu colocaria esses P´s numa tabela detalhe. seria uma estrutura mais ou menos assim:

[ProdutosFaixaDePeso]
ID_PRODUTO (FK)
PESOATE
VALOR

os dados seriam gravados assim:
ID_PRODUTO   PESOATE    VALOR
1            0,2        2
1            0,5        2,8
1            1,0        3
2            0,2        3
2            0,8        3,5
2            1,0        4

note que dessa forma a liberdade é muito maior, tanto no limite das faixas quanto na quantidade de faixas.


daí o select seria assim:

select
  ecm.*,  -- mostra os dados da encomenda
  prod.*,  -- mostra os dados do produto
  (ecm.peso * 
      isnull( (select top 1
                 pfp.valor 
               from
                 produtosfaixadepeso pfp
               where
                 pfp.id_produto=prod.id_produto 
                 and pfp.pesoate <= ecm.peso
               order by
                 pfp.pesoate desc),0 )
  ) preco  -- calcula o preço
from
  encomendas ecm
inner join produtos prod on
  (prod.id_produto=ecm.id_produto)
where [...]


obs.: os comandos são para SQL Server. se estiver utilizando Firebird, troque o [b:23f718a853]Top 1[/b:23f718a853] por [b:23f718a853]First 1[/b:23f718a853] e o [b:23f718a853]IsNull[/b:23f718a853] por [b:23f718a853]Coalesce[/b:23f718a853], desde que o FB seja 1.5.XXX


Responder

Gostei + 0

21/10/2005

Ramms

bom, eu colocaria esses P´s numa tabela detalhe. seria uma estrutura mais ou menos assim: [ProdutosFaixaDePeso] ID_PRODUTO (FK) PESOATE VALOR os dados seriam gravados assim:
ID_PRODUTO   PESOATE    VALOR
1            0,2        2
1            0,5        2,8
1            1,0        3
2            0,2        3
2            0,8        3,5
2            1,0        4
note que dessa forma a liberdade é muito maior, tanto no limite das faixas quanto na quantidade de faixas. daí o select seria assim:
select
  ecm.*,  -- mostra os dados da encomenda
  prod.*,  -- mostra os dados do produto
  (ecm.peso * 
      isnull( (select top 1
                 pfp.valor 
               from
                 produtosfaixadepeso pfp
               where
                 pfp.id_produto=prod.id_produto 
                 and pfp.pesoate <= ecm.peso
               order by
                 pfp.pesoate desc),0 )
  ) preco  -- calcula o preço
from
  encomendas ecm
inner join produtos prod on
  (prod.id_produto=ecm.id_produto)
where [...]
obs.: os comandos são para SQL Server. se estiver utilizando Firebird, troque o [b:0b7d9e3cd9]Top 1[/b:0b7d9e3cd9] por [b:0b7d9e3cd9]First 1[/b:0b7d9e3cd9] e o [b:0b7d9e3cd9]IsNull[/b:0b7d9e3cd9] por [b:0b7d9e3cd9]Coalesce[/b:0b7d9e3cd9], desde que o FB seja 1.5.XXX


Hummm parece meio complicado, mas vou tentar esse final de semana...
Só mais uma pergunta, no Firebird temos o Recurso First *** que puxa os primeiros registros(****) eu qria saber se ele tem algum recurso tipo LAST(HEUIAHEUIA) pra puxar os ultimos registros........
No mysql tem um recurso interessante tbm, o LIMIT, no firebird eu tenho algo parecido??
Vlw...


Responder

Gostei + 0

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

Aceitar