Fórum Multiplicar Qtd. por valor em tabela externa #299596
15/10/2005
0
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
Curtir tópico
+ 0Posts
16/10/2005
Edilcimar
Gostei + 0
17/10/2005
Ramms
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?
Gostei + 0
21/10/2005
Ramms
Gostei + 0
21/10/2005
Emerson Nascimento
publique a estrutura das suas tabelas.
Gostei + 0
21/10/2005
Ramms
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
Gostei + 0
21/10/2005
Emerson Nascimento
2o. como vc sabe que P1 é de 0,00g a 0,20g ? e de onde vem o valor a ser cobrado?
Gostei + 0
21/10/2005
Ramms
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
Gostei + 0
21/10/2005
Emerson Nascimento
isso em produtos diferentes, certo?
Gostei + 0
21/10/2005
Ramms
isso em produtos diferentes, certo?[/quote:19b7cb068c]
Isso
Gostei + 0
21/10/2005
Emerson Nascimento
[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
Gostei + 0
21/10/2005
Ramms
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
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 [...]
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...
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)