Soma com tabelas

SQL Server

25/01/2015

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

Marilia Silva

Curtidas 0

Respostas

Marisiana Battistella

Marisiana Battistella

25/01/2015

Você esta fazendo isso diretamente no banco de dados ou é na aplicação?
GOSTEI 0
Thiago Cruz

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

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.
GOSTEI 0
Marilia Silva

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

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.
GOSTEI 0
Marilia Silva

Marilia Silva

25/01/2015

Tem como fazer isso no banco? como?
GOSTEI 0
Marisiana Battistella

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

Marilia Silva

25/01/2015

Mas como transferir esse valor para a outra tabela com o campo "valor_total"?
GOSTEI 0
Marisiana Battistella

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...
GOSTEI 0
Marisiana Battistella

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

Marilia Silva

25/01/2015

Somente com upadate então não é?
GOSTEI 0
Marisiana Battistella

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..
GOSTEI 0
Marilia Silva

Marilia Silva

25/01/2015

Ai já foge um pouco do que estou estudando, mas entendi. obrigada mesmo Marisiana.
GOSTEI 0
Marisiana Battistella

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.
GOSTEI 0
Marilia Silva

Marilia Silva

25/01/2015

Complicou um pouco, rsrsrs.
GOSTEI 0
Pjava

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

Marilia Silva

25/01/2015

Vou testar! obrigada Pjava.
GOSTEI 0
Marilia Silva

Marilia Silva

25/01/2015

Fiz as modificações de acordo com uma minha estrutura, mas ta dando erro


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

Pjava

25/01/2015

Lá está:
form venda_itens t1

e não
from venda_itens t1
GOSTEI 0
Marisiana Battistella

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
POSTAR