Usuário com melhor resposta
Relatorio SQL SERVER - Help

Pergunta
-
Boa Noite,
Gente to iniciando na area de banco ..
Preciso fazer um relatorio, que apresente, Quantidade do Produto, Nome do Produto , Data Entrada\Saida ...
Tenho as seguintes tabelas: Produto, Entrada e Saida
Na Tabela Produto, tenho as colunas ... Nome Produto, tipo,Saldo Minimo,Quantidade
Na Tabela Entrada, são as informações cadastrada no recebimento do produto, como Nome, Quantidade recebida, data de recebimento e tipo do produto
Na tabela saida, sera movimentada, toda vez que o cliente solicitar o produto ..
Terei de inserir Nome do Produto, a Quantidade que esta sendo solicitada.
O que eu preciso, é que toda vez que eu der baixa do produto na tabela Saida, automaticamente diminua na tabela Produto.
Favor ajudem - me.
terça-feira, 24 de setembro de 2013 00:52
Respostas
-
Consegui resolver com a trigger, como suspeitei
Usei essas instruções
- Marcado como Resposta Giovani Cr segunda-feira, 30 de setembro de 2013 19:33
sexta-feira, 27 de setembro de 2013 17:55 -
SS_DBAJr,
Veja estes exemplos de Trigger:
Create Table NovosProdutos (Codigo Int Identity(1,1), Descricao VarChar(20), Saldo Int) Go Insert Into NovosProdutos Values('Produto -'+Convert(VarChar(3),@@Identity),0) Go 100 Create Table Movimentacao (Codigo Int Identity(1,1), CodProduto Int, TipoMovimentacao Char(1), Valor Int) Go Create Trigger T_MovimentacaoSaldo On Movimentacao After Insert, Update As Declare @TipoMovimentacao Char(1) Select @TipoMovimentacao=TipoMovimentacao from Inserted If @TipoMovimentacao = 'E' Begin Update NovosProdutos Set Saldo = Saldo + I.Valor from NovosProdutos NP Inner Join Inserted I On NP.Codigo = I.CodProduto End If @TipoMovimentacao = 'S' Begin Update NovosProdutos Set Saldo = Saldo - I.Valor from NovosProdutos NP Inner Join Inserted I On NP.Codigo = I.CodProduto End --Fazendo lançamentos de entrada Insert Into Movimentacao Values(2,'E',10) Insert Into Movimentacao Values(2,'E',15) Insert Into Movimentacao Values(2,'E',5) Insert Into Movimentacao Values(2,'E',22) Insert Into Movimentacao Values(2,'E',10) --Fazendo lançamentos de saída Insert Into Movimentacao Values(2,'S',8) Insert Into Movimentacao Values(2,'S',5) Insert Into Movimentacao Values(2,'S',3) Insert Into Movimentacao Values(2,'S',2) Insert Into Movimentacao Values(2,'S',1) Insert Into Movimentacao Values(8,'E',10) Insert Into Movimentacao Values(9,'E',15) Insert Into Movimentacao Values(1,'E',5) Insert Into Movimentacao Values(3,'E',22) Insert Into Movimentacao Values(22,'E',10) --Fazendo lançamentos de saída Insert Into Movimentacao Values(8,'S',8) Insert Into Movimentacao Values(9,'S',5) Insert Into Movimentacao Values(1,'S',3) Insert Into Movimentacao Values(3,'S',2) Insert Into Movimentacao Values(22,'S',1) Select * from NovosProdutos
--Criando a Table de Novos Produtos-- Create Table NovosProdutos (Codigo Int Identity(1,1), Descricao VarChar(10)) --Criando a Table de Histórico Novos Produtos-- Create Table HistoricoNovosProdutos (Codigo Int, Descricao VarChar(10)) Go --Inserindo valores -- Insert Into Novosprodutos Values('Arroz') Insert Into Novosprodutos Values('Arroz1') Insert Into Novosprodutos Values('Arroz2') Insert Into Novosprodutos Values('Arroz3') Go --Criando a Trigger para controle de histórico-- Create TRIGGER T_Historico ON NovosProdutos for update AS IF (Select Descricao from Inserted) <> (Select Descricao from Deleted) BEGIN INSERT Into HistoricoNovosProdutos (Codigo, Descricao) SELECT Codigo, Descricao FROM INSERTED END Go --Fazendo os teste -- Update NovosProdutos Set Descricao='Arroz 4' Where Codigo = 1 Go Update NovosProdutos Set Descricao='Arroz1' Where Codigo = 2 Go
CREATE Trigger T_Atualizar_Saldos On EstFisic After Insert, Update As Set NoCount Off Declare @TipoMov Char(1), @Codigo Char(10), @Quantidade Float(8), @Data_Mov DateTime Select @TipoMov=Status, @Quantidade=Quantidade, @Codigo=Codigo, @Data_Mov=Data From Inserted Begin If @TipoMov = 'E' Begin Update Produtos Set Saldo= Saldo+@Quantidade, Data=@Data_Mov Where Codigo = @Codigo End If @TipoMov='S' Begin Update Produtos Set Saldo= Saldo-@Quantidade, Data=@Data_Mov Where Codigo = @Codigo End End
Pedro Antonio Galvão Junior [MVP | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados | SorBR.Net | Professor Universitário | MSIT.com]
- Marcado como Resposta Giovani Cr segunda-feira, 30 de setembro de 2013 19:33
sexta-feira, 27 de setembro de 2013 18:03
Todas as Respostas
-
Você quer fazer tudo isso em SQL ? 100 % ? Vai usar uma linguagem de programação ?
Achei meio estranho fazer isso apenas em SQL se é que eu entendi bem, até porque você sempre dará baixa em apenas um produto ?
Envia pra gente até onde você já fez pra darmos uma olhada, mas isso tudo em SQL... sei não viu '-'
abraço
- Sugerido como Resposta - Sidney Carvalho quarta-feira, 25 de setembro de 2013 05:33
terça-feira, 24 de setembro de 2013 04:42 -
Oi, Sidney
desculpa a demora.
Consegui parar pra ver isso agora. Então ainda nem comecei nada ..
Vou explicar melhor .. os produtos é tudo que temos em estoque, computadores, tonner, impressoras, etc ..
Por exemplo o Tonner ..
Toda vez que for solicitado um, farei a inserção na Tabela Saida, e preciso que automaticamente diminua na tabela Produto, onde tenho o campo Quantidade do Produto.
Pensei em usar uma trigger, sera que serve, como eu disse estou iniciando, então já sabe né..
Desde ja agradeço a atençãosexta-feira, 27 de setembro de 2013 14:49 -
Consegui resolver com a trigger, como suspeitei
Usei essas instruções
- Marcado como Resposta Giovani Cr segunda-feira, 30 de setembro de 2013 19:33
sexta-feira, 27 de setembro de 2013 17:55 -
SS_DBAJr,
Veja estes exemplos de Trigger:
Create Table NovosProdutos (Codigo Int Identity(1,1), Descricao VarChar(20), Saldo Int) Go Insert Into NovosProdutos Values('Produto -'+Convert(VarChar(3),@@Identity),0) Go 100 Create Table Movimentacao (Codigo Int Identity(1,1), CodProduto Int, TipoMovimentacao Char(1), Valor Int) Go Create Trigger T_MovimentacaoSaldo On Movimentacao After Insert, Update As Declare @TipoMovimentacao Char(1) Select @TipoMovimentacao=TipoMovimentacao from Inserted If @TipoMovimentacao = 'E' Begin Update NovosProdutos Set Saldo = Saldo + I.Valor from NovosProdutos NP Inner Join Inserted I On NP.Codigo = I.CodProduto End If @TipoMovimentacao = 'S' Begin Update NovosProdutos Set Saldo = Saldo - I.Valor from NovosProdutos NP Inner Join Inserted I On NP.Codigo = I.CodProduto End --Fazendo lançamentos de entrada Insert Into Movimentacao Values(2,'E',10) Insert Into Movimentacao Values(2,'E',15) Insert Into Movimentacao Values(2,'E',5) Insert Into Movimentacao Values(2,'E',22) Insert Into Movimentacao Values(2,'E',10) --Fazendo lançamentos de saída Insert Into Movimentacao Values(2,'S',8) Insert Into Movimentacao Values(2,'S',5) Insert Into Movimentacao Values(2,'S',3) Insert Into Movimentacao Values(2,'S',2) Insert Into Movimentacao Values(2,'S',1) Insert Into Movimentacao Values(8,'E',10) Insert Into Movimentacao Values(9,'E',15) Insert Into Movimentacao Values(1,'E',5) Insert Into Movimentacao Values(3,'E',22) Insert Into Movimentacao Values(22,'E',10) --Fazendo lançamentos de saída Insert Into Movimentacao Values(8,'S',8) Insert Into Movimentacao Values(9,'S',5) Insert Into Movimentacao Values(1,'S',3) Insert Into Movimentacao Values(3,'S',2) Insert Into Movimentacao Values(22,'S',1) Select * from NovosProdutos
--Criando a Table de Novos Produtos-- Create Table NovosProdutos (Codigo Int Identity(1,1), Descricao VarChar(10)) --Criando a Table de Histórico Novos Produtos-- Create Table HistoricoNovosProdutos (Codigo Int, Descricao VarChar(10)) Go --Inserindo valores -- Insert Into Novosprodutos Values('Arroz') Insert Into Novosprodutos Values('Arroz1') Insert Into Novosprodutos Values('Arroz2') Insert Into Novosprodutos Values('Arroz3') Go --Criando a Trigger para controle de histórico-- Create TRIGGER T_Historico ON NovosProdutos for update AS IF (Select Descricao from Inserted) <> (Select Descricao from Deleted) BEGIN INSERT Into HistoricoNovosProdutos (Codigo, Descricao) SELECT Codigo, Descricao FROM INSERTED END Go --Fazendo os teste -- Update NovosProdutos Set Descricao='Arroz 4' Where Codigo = 1 Go Update NovosProdutos Set Descricao='Arroz1' Where Codigo = 2 Go
CREATE Trigger T_Atualizar_Saldos On EstFisic After Insert, Update As Set NoCount Off Declare @TipoMov Char(1), @Codigo Char(10), @Quantidade Float(8), @Data_Mov DateTime Select @TipoMov=Status, @Quantidade=Quantidade, @Codigo=Codigo, @Data_Mov=Data From Inserted Begin If @TipoMov = 'E' Begin Update Produtos Set Saldo= Saldo+@Quantidade, Data=@Data_Mov Where Codigo = @Codigo End If @TipoMov='S' Begin Update Produtos Set Saldo= Saldo-@Quantidade, Data=@Data_Mov Where Codigo = @Codigo End End
Pedro Antonio Galvão Junior [MVP | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados | SorBR.Net | Professor Universitário | MSIT.com]
- Marcado como Resposta Giovani Cr segunda-feira, 30 de setembro de 2013 19:33
sexta-feira, 27 de setembro de 2013 18:03 -
Obrigada Pedro,
Vou testar esse também. só pra ver o que sair, porque consegui o que queria.
Valeu mesmo.
Vim pedir outra ajuda de voces ...
Com essa mesma tabela
Preciso gerar um relatório mensal, com as seguintes informações,
o Setor que solicitou, a quantidade de tonner Preto, a quantidade de colorido e o total.
Que ficaria assim
Setor - Preto - Colorido - Total
TI 2 1 3
Essa é a query que estou usando, só conseguir agrupar o modelo.
No caso temos 4 tipos de coloridos, e eles começam com 'LEXMARK C'
Select
sa.SETOR Setor,
Case When pr.NOME_PRODUTO LIKE '%LEXMARK C%'
Then 'Colorido'
Else 'Preto'
End as 'Modelo',
SUM(SALDO) Quantidade
From tb_PRODUTO pr
inner join tb_SAIDA sa
On pr.ID_PRODUTO = sa.ID_PRODUTO
Group By sa.SETOR,pr.NOME_PRODUTO
quarta-feira, 2 de outubro de 2013 11:44 -
Voltei gente.
Surgiu um probleminha,
fiz a trigger de atualização estava tudo certo, porque no primeiro momento as informações estavam zeradas,já que iamos começar a contar a partir desse mês. Eis que fiz uma atualização, como preciso, saber a data que o produto saiu do estoque, não posso apenas alterar, tenho de inserir novamente, ai ,é que esta o problema, toda vez que é inserido, automaticamente a informação é duplicada.
Preciso que apresente apenas a somatória, sem a duplicidade, no relatório.
Help
sexta-feira, 18 de outubro de 2013 18:24