Soma com tabelas
Estou com duas tabelas que devem se relacionar:
vendas
- cod_venda
- cod_cliente
- data_venda
- valor_total
e a tabela de venda_itens
- cod_venda_item
- cod_venda
- cod_produto
- quantidade
- vl_unitario
- subtotal
tenho que pegar a quantidade + valor unitario colocar o valor no subtotal e transferir para o valor_total da tabela vendas.
vendas
- cod_venda
- cod_cliente
- data_venda
- valor_total
e a tabela de venda_itens
- cod_venda_item
- cod_venda
- cod_produto
- quantidade
- vl_unitario
- subtotal
tenho que pegar a quantidade + valor unitario colocar o valor no subtotal e transferir para o valor_total da tabela vendas.
Marilia Silva
Curtidas 0
Respostas
Marisiana Battistella
25/01/2015
Você esta fazendo isso diretamente no banco de dados ou é na aplicação?
GOSTEI 0
Thiago Cruz
25/01/2015
Este é o join básico para sua consulta:
Select a.quantidade, a.vl_unitario, a.subtotal, b.valor_total From Venda_item a Inner Join Vendas b On a.Cod_Venda = b.Cod_Venda
GOSTEI 0
Marisiana Battistella
25/01/2015
A informação no campo subtotal pode ser preenchida no momento que estiver sendo realizada a inserção ou alteração do item de venda.
A informação no campo valor_total poderá ser preenchida através de uma alteração (UPDATE) realizado após cada inserção, alteração ou exclusão de item.
A informação no campo valor_total poderá ser preenchida através de uma alteração (UPDATE) realizado após cada inserção, alteração ou exclusão de item.
GOSTEI 0
Marilia Silva
25/01/2015
Não entendi bem, a intenção, é pegar o valor unitario e o subtotal, acho que multiplica, depois esses valores vão para o valor_total, não seria assim?
GOSTEI 0
Marisiana Battistella
25/01/2015
Para alimentar o campo subtotal, você terá que multiplicar o vl_unitario pela quantidade.
Já o valor_total, vai ser a soma dos subtotais daquela venda.
Já o valor_total, vai ser a soma dos subtotais daquela venda.
GOSTEI 0
Marilia Silva
25/01/2015
Tem como fazer isso no banco? como?
GOSTEI 0
Marisiana Battistella
25/01/2015
Sim! Para inserir o item:
INSERT INTO venda_itens (cod_venda_item, cod_venda, cod_produto, quantidade, vl_unitario, subtotal) VALUES ( 11, 3, 123, 3, 12.50, 3 * 12.50 );
GOSTEI 0
Marilia Silva
25/01/2015
Mas como transferir esse valor para a outra tabela com o campo "valor_total"?
GOSTEI 0
Marisiana Battistella
25/01/2015
Na outra tabela você devera fazer UPDATE e setar o valor_total...
Assim q eu puder t passo um exemplo...
Assim q eu puder t passo um exemplo...
GOSTEI 0
Marisiana Battistella
25/01/2015
Uma opção para fazer a alteração do valor total de uma venda é passando código da venda como parâmetro "cod_venda = 1":
UPDATE vendas SET valor_total = (select SUM(vi.subtotal * vi.quantidade) from venda_itens vi where vi.cod_venda = codigogrupoproduto ) WHERE cod_venda = 1
GOSTEI 0
Marilia Silva
25/01/2015
Somente com upadate então não é?
GOSTEI 0
Marisiana Battistella
25/01/2015
Sim, pois você precisa ter a venda inserida para poder inserir os itens dela, então, depois de inseridos os itens você terá que alterar o valor da venda para setar o valor correto.
A não ser, na aplicação você tenha uma variável que possua o valor total da venda e passe esse valor no momento da inserção da venda.
Tudo depende de como você vai fazer essa manutenção..
A não ser, na aplicação você tenha uma variável que possua o valor total da venda e passe esse valor no momento da inserção da venda.
Tudo depende de como você vai fazer essa manutenção..
GOSTEI 0
Marilia Silva
25/01/2015
Ai já foge um pouco do que estou estudando, mas entendi. obrigada mesmo Marisiana.
GOSTEI 0
Marisiana Battistella
25/01/2015
Por nada!
Mas acredito que não fuja do q vc está estudando...
Se vc está estudando banco de dados, vc sempre deverá ter a venda inserida para depois inserir os itens dela, pois o atributo cod_venda da tabela venda_itens deverá ser uma Foreign Key refereciando a tabela vendas.
Mas acredito que não fuja do q vc está estudando...
Se vc está estudando banco de dados, vc sempre deverá ter a venda inserida para depois inserir os itens dela, pois o atributo cod_venda da tabela venda_itens deverá ser uma Foreign Key refereciando a tabela vendas.
GOSTEI 0
Marilia Silva
25/01/2015
Complicou um pouco, rsrsrs.
GOSTEI 0
Pjava
25/01/2015
Você não precisa ter um campo persistente para sub_total. Ele pode ser apenas calculado no seu select. Aí sim, esse valor calculado você pode carregar o seu campo total_vendas. Fiz um select sem testes e veja se resolve. Acho que sim, se gerar algum erro, nos avise.
select v.valor_total = (select (t1.quantidade*t1.vl_unitario) form vendas_itens t1 where t1.cod_venda = v.cod_venda) from vendas v inner join venda_itens vi on v.cod_venda = vi.cod_venda
GOSTEI 0
Marilia Silva
25/01/2015
Vou testar! obrigada Pjava.
GOSTEI 0
Marilia Silva
25/01/2015
Fiz as modificações de acordo com uma minha estrutura, mas ta dando erro
Erro
Msg 102, Level 15, State 1, Line 358
Incorrect syntax near '='.
Msg 102, Level 15, State 1, Line 358
Incorrect syntax near 'venda_itens'.
select v.valor_total = (select (t1.quantidade*t1.vl_unit) form venda_itens t1 where t1.cod_venda = v.cod_venda) from vendas v inner join venda_itens vi on v.cod_venda = vi.cod_venda
Erro
Msg 102, Level 15, State 1, Line 358
Incorrect syntax near '='.
Msg 102, Level 15, State 1, Line 358
Incorrect syntax near 'venda_itens'.
GOSTEI 0
Pjava
25/01/2015
Lá está:
form venda_itens t1
e não
from venda_itens t1
form venda_itens t1
e não
from venda_itens t1
GOSTEI 0
Marisiana Battistella
25/01/2015
Complicou um pouco, rsrsrs.
Você já aprendeu o que são as Foreign Keys e as Primary Keys?
GOSTEI 0