Array
(
)

Soma com tabelas

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

Marisiana
   - 26 jan 2015

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

Thiago Cruz
   - 26 jan 2015

Este é o join básico para sua consulta:

#Código

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

Marisiana
   - 26 jan 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.

Marilia Silva
   - 26 jan 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?

Marisiana
   - 28 jan 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.

Marilia Silva
   - 28 jan 2015

Tem como fazer isso no banco? como?

Marisiana
   - 28 jan 2015

Sim! Para inserir o item:
#Código

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 );

Marilia Silva
   - 28 jan 2015

Mas como transferir esse valor para a outra tabela com o campo "valor_total"?

Marisiana
   - 29 jan 2015

Na outra tabela você devera fazer UPDATE e setar o valor_total...
Assim q eu puder t passo um exemplo...

Marisiana
   - 29 jan 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":
#Código

UPDATE vendas
SET valor_total = (select SUM(vi.subtotal * vi.quantidade)
                  from venda_itens vi
                  where vi.cod_venda = codigogrupoproduto )
WHERE cod_venda =  1  

Marilia Silva
   - 30 jan 2015

Somente com upadate então não é?

Marisiana
   - 30 jan 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..

Marilia Silva
   - 30 jan 2015

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

Marisiana
   - 02 fev 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.

Marilia Silva
   - 04 fev 2015

Complicou um pouco, rsrsrs.

Pjava
   - 04 fev 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.

#Código

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

Marilia Silva
   - 04 fev 2015

Vou testar! obrigada Pjava.

Marilia Silva
   - 04 fev 2015

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

#Código


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

Pjava
   - 06 fev 2015

Lá está:
form venda_itens t1

e não
from venda_itens t1

Marisiana
   - 06 fev 2015


Citação:
Complicou um pouco, rsrsrs.

Você já aprendeu o que são as Foreign Keys e as Primary Keys?